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.