Unter Mac OS X wird regelmäßig ein Shell-Skript ohne root-Berechtigung ausgeführt

8

Ich möchte eine Datei mit .sh-Typ oder .py auf Mac OS X starten, ohne root zu verwenden, Ich habe in Google gesucht und gefunden launchctl kann mir helfen,

Also lese ich Tutorial und mache dasselbe im Tutorial, aber es funktioniert nicht für mich, [ich benutze mac os x 10.9 x64]

Meine .plist-Datei [1.sh-Datei alle 60 Sekunden ausführen]:

%Vor%

Quelle von 1.sh:

%Vor%

Ich habe Run.plist in /Users/paul/Run.plist

gestellt

und führen Sie den Befehl vom Terminal aus:

%Vor%

Befehle werden ohne Fehler ausgeführt, aber ich sehe nichts alles in works.txt

kann mir bitte jemand helfen?

    
user3671325 26.05.2014, 14:48
quelle

2 Antworten

6

Aus irgendeinem Grund, dass Sie keine normale Crontab verwenden möchten?

%Vor%

Dieser Befehl sollte einen Cron-Job hinzufügen, der einmal pro Minute ausgeführt wird.

Beachten Sie, dass dieser Befehl auch alle crontab ersetzt, die Sie bereits haben. Der Befehl crontab - sollte mit Vorsicht als Abkürzung verwendet werden.

Wenn Sie ein vorhandenes crontab bearbeiten möchten, um zu vermeiden, dass zuvor eingestellte Jobs gelöscht werden, können Sie crontab -e verwenden. (Wenn vim gestartet wird und Sie nicht wissen, wie vim verwendet werden soll, können Sie durch Drücken von ESC : q ! Geben Sie ein und gehen Sie dann zur Editor-Dokumentation.)

Wenn Sie Anweisungen zum Bearbeiten von Crontabs benötigen, geben Sie man crontab in Ihre Shell ein. Wenn Sie Syntaxinformationen für die crontab-Datei benötigen, zeigt man 5 crontab dies an.

Viel Spaß!

UPDATE: (pro Kommentar)

Um Ihren Job alle 30 Sekunden auszuführen, ist ein einfacher Hack erforderlich. Cron führt Jobs nur pro Minute aus, so dass Sie alle 30 Sekunden zwei Jobs ausführen können, von denen einer eine Verzögerung von 30 Sekunden hat. Zum Beispiel:

%Vor%

Hoffe, das hilft.

    
ghoti 26.05.2014, 14:55
quelle
20

Um zu verdeutlichen: Die OP's .plist datei selbst war vollkommen OK - das Problem stellte sich heraus, dass innerhalb des Shell-Skripts aufgerufen wurde ( in der Frage nicht gezeigt).

Auf OS X verwenden .plist -Dateien, die vom CLI launchctl geladen und vom Daemon-Manager launchd aufgerufen wurden, die bevorzugte Art der Planung von wiederkehrenden Aufgaben (siehe unten für mehr).

Zu beachten:

  • Das Format von launchd .plist Dateien ist beschrieben unter Ссылка oder man launchd.plist
  • Damit eine .plist -Datei bei jeder Anmeldung des aktuellen Benutzers geladen wird, muss sie in ~/Library/LaunchAgents/ () platziert werden All-User -Dateien müssen in /Library/LaunchAgent/ platziert werden - erfordert Root-Rechte.
  • Die Angabe von Output-Capture-Dateien mit den Schlüsseln StandardOutPath und StandardErrorPath bedeutet, dass nachfolgende Aufrufe an die angegebenen Dateien angehängt werden, was bedeutet, dass diese Dateien beibehalten werden unbegrenzt wachsen , sofern nicht extern verwaltet .
  • Zur Fehlerbehebung : @Grady Ratschlag des Players: start Console.app und nach com.apple.launchd.peruser entries suchen - ein Fehler beim Aufruf des Befehls .plist würde dort zeigen.

@ ghotis Antwort beschreibt eine allgemeine Unix-Alternative für launchd , cron (wird normalerweise unter Linux verwendet):

Wie sich cron auf OS X bezieht: @ghoti fragt:

  

Aus irgendeinem Grund, dass Sie keine normale Crontab verwenden möchten?

Unter OS X wird man crontab empfohlen (Hervorhebung hinzugefügt):

  

Obwohl cron (8) und crontab (5) offiziell unterstützt werden        unter Darwin [OS X] wurde ihre Funktionalität in launchd (8) aufgenommen ,        Dies bietet eine flexiblere Möglichkeit zur automatischen Ausführung von Befehlen .        Weitere Informationen finden Sie unter launchctl (1).

Die untere Zeile lautet:

  • Wenn Sie aus einem * nix-Hintergrund stammen , können Sie% cron und crontab weiterhin verwenden, vorausgesetzt,
    • Sie sind sich der Tatsache bewusst, dass zusätzliche Hintergrundaufgaben vorhanden sein können, die über launchd geplant sind.
    • Sie kennen die Einschränkungen von cron und können mit / um sie arbeiten.
  • Andernfalls unter OS X:
    • Viele Apps von Drittanbietern verwenden das native Feature launchd und legen daher periodische Hintergrundaufgaben über .plist files in /Library/LaunchAgents (für alle Benutzer) oder ~/Library/LaunchAgents (für den aktuellen Benutzer) fest.
    • Wenn Sie die Verwaltung von Hintergrundaufgaben auf diese Standorte zentralisieren möchten und / oder die erhöhte Flexibilität, die launchd bietet, nutzen möchten, gehen Sie mit der Angabe von Hintergrundaufgaben über .plist -Dateien vor, die von% ausgewertet werden. co_de%.

Das Hinzufügen einfacher launchd Aufgaben ist wahrscheinlich einfacher als das Erstellen von cron Dateien für .plist , aber von Dienstprogrammen von Drittanbietern wie Lingon 3 kann mit letzterem helfen.

Außerdem gibt es subtile Unterschiede in der Art, wie launchd Aufgaben aufgerufen werden, im Vergleich zu pro Benutzer cron Aufgaben: die ersteren erlauben keine Benutzerinteraktion über AppleScript, während letztere mach das.

In diesem Fall erhöhte Flexibilität von launchd : Das OP fragt in einem Folgekommentar, dass die Aufgabe alle 30 Sekunden ausführen soll:

  • Das minimale Intervall für launchd Aufgaben beträgt 60 Sekunden , was die Problemumgehung in @ ghotis Antwort erfordert.

  • Im Gegensatz dazu ist es mit der Datei cron launchd ausreichend, .plist in <key>StartInterval</key><integer>60</integer> zu ändern.

mklement0 27.05.2014 02:21
quelle

Tags und Links