Der Einstieg in launchctl kann definitiv eine frustrierende Erfahrung sein. Ich habe viele Artikel gefunden, in denen erklärt wird, was Sie tun sollen, aber es gibt nur wenige herunterladbare Beispiele. Hier ist ein einfaches LaunchDaemon, das hoffentlich ein guter Ausgangspunkt ist. Sie können die Dateien einfach hier herunterladen, wenn Sie nicht Lust haben, zu kopieren und einzufügen.
Hinweis: Sie müssen MY_USER_NAME durch Ihren Benutzernamen ersetzen. Die Plist muss Ihr Skript finden.
// at ~/Desktop/testdaemon/com.wintr.eodemail.plist <?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>Program</key> <string>/Users/MY_USER_NAME/Desktop/testdaemon/testdaemon.sh</string> <key>StandardErrorPath</key> <string>/var/log/eod-email.log</string> <key>StandardOutPath</key> <string>/var/log/eod-email.log</string> <key>RunAtLoad</key> <true/> <key>StartInterval</key> <integer>15</integer> </dict> </plist>
Dies ist ein einfaches Daemonskript, das die datetime an eine Datei auf Ihrem Desktop anfügt. Hinweis: Da das Skript als root ausgeführt wird, ist Tilde (~) nicht das erwartete Ausgangsverzeichnis.
// at ~/Desktop/testdaemon/testdaemon.sh #!/bin/sh home="/Users/MYUSERNAME" ## note -- this will be run as root, ~ is not your normal user now=$(date "+%Y-%m-%d %H.%M.%S") echo $now >> "$home/Desktop/TestFile.txt"
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 für andere nicht schreibbar sein, da dies im Wesentlichen root-Berechtigungen hat.
// ~/Desktop/testdaemon/install.sh #!/bin/sh -e plist_path="com.wintr.eodemail.plist" plist_filename=$(basename "$plist_path") install_path="/Library/LaunchDaemons/$plist_filename" echo "installing launchctl plist: $plist_path --> $install_path" sudo cp -f "$plist_path" "$install_path" sudo chown root "$install_path" sudo chmod 644 "$install_path" sudo launchctl unload "$install_path" sudo launchctl load "$install_path" echo "to check if it's running, run this command: sudo launchctl list | grep wintr" echo "to uninstall, run this command: sudo launchctl unload \"$install_path\""