Ich habe Apples scheinbar unkomplizierte Dokumente verwendet , um einen LaunchDaemon zum Ausführen eines von mir geschriebenen Node.js-Skripts zu erstellen.
Hier ist die plist
Datei. Es handelt sich im Grunde genommen genau um ein Kopieren und Einfügen aus Apples Dokumenten, das alle 300 Sekunden ausgeführt wird:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.wintr.eodemail</string>
<key>ProgramArguments</key>
<array>
<string>~/projects/eod_email/eod</string>
</array>
<key>StartInterval</key>
<integer>300</integer>
<key>StandardOutPath</key>
<string>/var/log/eod-email.log</string>
<key>StandardErrorPath</key>
<string>/var/log/eod-email.log</string>
<key>Debug</key>
<true/>
</dict>
</plist>
Hier ist der Fehler, den ich bekomme /var/log/system.log
:
Jul 22 10:55:52 Nick-Cox com.apple.xpc.launchd[1] (com.wintr.eodemail[7097]): Service could not initialize: 14E46: xpcproxy + 13421 [1402][7D917364-B96E-3F93-B923-A89B5BF5736D]: 0x2
Was ich getan habe:
- Es hat die gleichen Berechtigungen wie die übrigen Dateien in / Library / LaunchDaemons (
-rw-r--r--
im Besitz von root). - Ich habe die Dokumente für xpc gelesen , aber das hat nicht viel geholfen.
- Ich habe sichergestellt, dass das Skript Node.js ausreichend zulässig ist (777) und über die Befehlszeile ausgeführt werden kann (es ist).
- Versuchte den absoluten Pfad zur Datei (
/Users/nickcox/projects/eod_email/eod
) und stellte sicher, dass ichlaunchctl unload (daemonname)
und lieflaunchctl load (daemon name)
Dies scheint viel komplizierter zu sein als Cron, der laut diesen Apple-Dokumenten anscheinend veraltet ist. Was muss ich tun, damit dieses Skript nach einem Zeitplan ausgeführt wird?
Antworten:
Der Einstieg in launchctl kann definitiv eine frustrierende Erfahrung sein. Ich habe viele Artikel gefunden, die erklären, was Sie tun sollten, aber nur wenige kleine herunterladbare Beispiele. Hier ist ein einfacher LaunchDaemon, der hoffentlich ein guter Ausgangspunkt sein wird. Sie können die Dateien hier einfach herunterladen, wenn Sie keine Lust zum Kopieren und Einfügen haben.
Hinweis: Sie müssen MY_USER_NAME durch Ihren Benutzernamen ersetzen. Die Liste muss Ihr Skript finden.
Dies ist ein einfaches Daemon-Skript, das die Datums- und Uhrzeitangabe an eine Datei auf Ihrem Desktop anfügt. Hinweis: Da das Skript als root ausgeführt wird, ist tilde (~) nicht das erwartete Ausgangsverzeichnis.
Schließlich schreibe ich immer ein kleines Shell-Skript, um die LaunchDaemons zu installieren, da es leicht ist, einen Fehler zu machen. Da launchctl Ihr Skript als Root ausführt, müssen die Berechtigungen des Skripts nicht von anderen geschrieben werden können, da dies ihnen im Wesentlichen Root-Berechtigungen einräumen würde.
quelle
Es wäre hilfreich, wenn Sie die Ausgabe von einfügen könnten
launchctl list | grep 'com.wintr.eodemail'
.Überprüfen Sie auch Ihre
/var/log/eod-email.log
Datei. Es kann Ihnen genaue Fehler geben.Ich empfehle, das zu installieren
brew cask install launchcontrol
, das ein GUI-Tool für Launchctl ist. Es kann helfen, Fehler und Fehlerbehebung zu erkennen.quelle