LaunchDaemon automatisch laden?

Ich habe ein kleines Skript geschrieben, um meinen Netzwerkstandort basierend auf einigen Bedingungen automatisch zu aktualisieren, und habe es mit einer launchd-Plist gekoppelt, damit es alle paar Minuten ausgeführt wird.

Ich habe jedoch festgestellt, dass meine launchd-Plist nicht geladen zu werden scheint, wenn mein Computer neu gestartet wird. Meine plist ist in ~/Library/LaunchDaemonsund ist ziemlich einfach:

<?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.davedelong.location-updater</string>
    <key>Program</key>
    <string>/path/to/my/location_updater.rb</string>
    <key>StartInterval</key>
    <integer>180</integer>
</dict>
</plist>

Mein LaunchDaemonsOrdner hat die erwarteten 700Berechtigungen, und das Ausführen launchctl loadmit meiner plist sorgt dafür, dass die Dinge einwandfrei funktionieren. Es ist nur so, dass es nicht geladen wird, wenn ich neu starte.

Ich hatte den Eindruck, dass alles automatisch von launchd geladen ~/Library/LaunchDaemonsund ~/Library/LaunchAgentsgeladen wurde. Ist dies nicht der Fall? Wenn dies der Fall ist (und ich denke, das ist es), warum wird meine Plist dann nicht geladen?

Antworten (1)

~/Library/LaunchDaemonsist kein gültiger Speicherort für Startagenten oder Startdämonen. Du missverstehst die Terminologie. LaunchDaemons sind systemweite Prozesse, während LaunchAgents pro Benutzer ausgeführt werden. Von der Launchd-Manpage:

~/Library/LaunchAgents         Per-user agents provided by the user.
/Library/LaunchAgents          Per-user agents provided by the administrator.
/Library/LaunchDaemons         System-wide daemons provided by the administrator.
/System/Library/LaunchAgents   Per-user agents provided by Mac OS X.
/System/Library/LaunchDaemons  System-wide daemons provided by Mac OS X.

Verschieben Sie Ihre plist nach ~/Library/LaunchAgents, und es sollte einfach funktionieren.

Aha. Dokumentation zur Rettung!