Ein einfaches Launchd-Tutorial
Angenommen, Sie haben ein kleines Skript geschrieben, das Sie von Zeit zu Zeit ausführen möchten. Wenn Sie einen Mac verwenden, ist launchd
ein perfektes Werkzeug.
Es ist besser als crontab
, weil unter anderem, wenn Ihr Computer ausgeschaltet ist, wenn Ihr Programm ausgeführt werden soll, launchd
Ihr Programm ausführen wird, sobald der Computer aufwacht. Inzwischen crontab
nicht.
Als erstes müssen Sie ein Skript erstellen, das ausgeführt werden soll. Ich werde einen einfachen Knoten schreiben.js aber Sie können verwenden, was Sie wollen.
touch ~/demo/main.js
Für dieses Beispiel protokolliert dieses Skript lediglich die Zeit, zu der es ausgeführt wurde.
console.log("Hello", Date.now())
Jetzt müssen wir eine launchd
Konfigurations-Plist-Datei erstellen.
touch ~/Library/LaunchAgents/com.demo.daemon.plist
Eine Plist-Datei ist nur Apples benutzerdefiniertes XML-Format für Konfigurationen. Fügen Sie diesen Code dort ein. Möglicherweise müssen Sie /Users/chet/demo
in das Verzeichnis ändern, das Sie für dieses Beispiel verwenden.
Diese Datei gibt einige Dinge an:
- Der Daemon wird gestartet, wenn sich der Benutzer anmeldet.
- Es wird alle 20 Sekunden ausgeführt.
- Es wird in einige Protokolldateien ausgegeben (sehr nützlich zum Debuggen).
- Es wird der Umgebungspfad festgelegt (nützlich, wenn Ihr Programm andere Befehle von
usr/local/bin
verwendet). - Der Befehl wird im Verzeichnis
/Users/chet/demo
ausgeführt. - Und der Befehl lautet
/usr/local/bin/node main.js
.
Es gibt eine Reihe anderer Optionen, über die Sie hier lesen können. Eine häufig verwendete Option ist die Option KeepAlive
, die Ihr Skript neu startet, wenn es endet oder abstürzt. Dies ist nützlich, wenn Sie möchten, dass Ihr Skript immer ausgeführt wird.
Jetzt müssen wir es nur noch zum Laufen bringen. Öffnen Sie zuerst die Console.app
. Sie haben es vielleicht noch nie benutzt, aber es ist eine native Utility-App zum Debuggen solcher Dinge. Im System.log-Bereich können Sie nach com.demo.daemon
suchen, um zu sehen, ob es irgendwelche Systemfehler gibt, wenn Sie versuchen, launchd
zu starten.
Führen Sie in Ihrem Terminal den folgenden Befehl aus.
launchctl load ~/Library/LaunchAgents/com.demo.daemon.plist
Wenn Sie Fehler in der Console.app
sehen, können Sie den Daemon mit unload
stoppen und in der stderr.log
-Datei nach Fehlern suchen.
launchctl unload ~/Library/LaunchAgents/com.demo.daemon.plist
cat ~/demo/stderr.log
Wenn alles gut gegangen ist, sollten Sie in Console.app
nichts sehen und alle 20 Sekunden sollten Protokolle in die Datei ~/demo/stdout.log
eingehen.