Ich habe eine Launchd-Plist-Datei, mit der ich jeden Tag zu einer ausgewählten Zeit ein Programm ausführe. Es funktioniert, aber es führt das Programm auch aus, wenn ich den Computer starte oder den Job mit dem GUI-Programm LaunchControl entlade und neu lade - obwohl ich den RunAtLoad
Schlüssel auf false gesetzt habe?
Die vollständige Plist-Datei finden Sie weiter unten. es befindet sich in /Library/LaunchAgents/
:
<?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>RunAtLoad</key>
<false/>
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
<key>Label</key>
<string>com.adbot.plist</string>
<key>LowPriorityIO</key>
<true/>
<key>Program</key>
<string>/Users/wcm1/programming/ricedh/adbot/adbot.py</string>
<key>StandardErrorPath</key>
<string>/tmp/com.adbot.plist.err</string>
<key>StandardOutPath</key>
<string>/tmp/com.adbot.plist.out</string>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Hour</key>
<integer>10</integer>
<key>Minute</key>
<integer>30</integer>
</dict>
</array>
</dict>
</plist>
Gedanken?
KeepAlive
Definition implizierteRunAtLoad
und sogar meinen Versuch,RunAtLoad
auf falsch zu setzen, außer Kraft setzte. IchKeepAlive
bin mir nicht sicher, warum dies der Fall ist, aber das Herausnehmen des Blocks scheint das Problem behoben zu haben.Antworten:
Sie haben wahrscheinlich eine Interaktion zwischen den Tasten
SuccessfulExit
undRunAtLoad
. Auf der Handbuchseite von launchd plist wird erwähnt, dass eine Inversion stattfindet, wenn FolgendesRunAtLoad
festgelegt ist:Andere haben mit diesem Verhalten zu kämpfen, siehe launchd ignoriert RunAtLoad = false .
quelle