Ich habe einen launchd-Daemon ~/Library/LaunchAgents
, der in Mavericks gut funktioniert. In der öffentlichen Betaversion von Yosemite wird es jedoch nicht gestartet. Die Daemon-Liste sieht so aus (mein Benutzername ist darksair
mit der UID 501)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.darksair.retrmail</string>
<key>ProgramArguments</key>
<array>
<string>/Users/darksair/bin/retrmail.py</string>
</array>
<key>KeepAlive</key>
<false/>
<key>StartInterval</key>
<integer>300</integer>
<key>LaunchOnlyOnce</key>
<false/>
<key>UserName</key>
<string>darksair</string>
<key>ProcessType</key>
<string>Standard</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/Users/darksair/Python/bin:/Users/darksair/Python3/bin:/Users/darksair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>StandardOutPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
<key>StandardErrorPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
</dict>
</plist>
Grundsätzlich soll es ~/bin/retrmail.py
alle 5 Minuten laufen .
Ich stelle fest, dass in Yosemite launchd auf 2.0 aktualisiert wird und launchctl neue Befehle hat. Ich habe es versucht
sudo launchctl kickstart user/501/org.darksair.retrmail
und es hieß
Could not find service "org.darksair.retrmail" in domain for uid: 501
Ich habe auch die alte Schule ausprobiert
sudo launchctl load ~/Library/LaunchAgents/retrmail.plist
und es hieß
/Users/darksair/Library/LaunchAgents/retrmail.plist: Path had bad ownership/permissions
Die Datei gehört mir und der Personalgruppe. Ich habe beide Berechtigungen 644 und 600 mit demselben Fehler versucht.
Weiß jemand, wie man einen launchd-Daemon in Yosemite richtig startet?
UPDATE: Sieht so aus, als müsste meine Launch Agent-Datei im Besitz von sein root:wheel
. Nachdem ich chown, versuchte ich es
sudo launchctl load ~/Library/LaunchAgents/retrmail.plist
und es gab keinen Fehler aus. Und ich denke, mein Deamon läuft einwandfrei. Ich lasse diese Frage offen, da ich mich erinnere, dass im launchd-Dokument eindeutig angegeben ist, dass der Benutzer, der den Dämon ausführt, Eigentümer der Datei des Startagenten sein kann.
UPDATE2: Nein, es lief nicht richtig. Es wurde nur einmal ausgeführt, aber nicht erneut, als wäre es entladen worden.
UPDATE3: Ich habe ein Upgrade auf die öffentliche Beta 3 von Yosemite durchgeführt und meinen Agenten darauf umgestellt
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.darksair.retrmail</string>
<key>ProgramArguments</key>
<array>
<string>/Users/darksair/bin/retrmail.py</string>
</array>
<key>StartInterval</key>
<integer>300</integer>
<key>UserName</key>
<string>darksair</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/Users/darksair/Python/bin:/Users/darksair/Python3/bin:/Users/darksair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>StandardOutPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
<key>StandardErrorPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
</dict>
</plist>
Ich habe diesen Agenten neu geladen und denke, dass er jetzt richtig funktioniert. Ich lasse diese Frage immer noch offen, weil ich nicht weiß, was mit meiner vorherigen Liste nicht stimmt.
Abschließend habe ich festgestellt, dass ich den Besitzer der Pliste ändern root:wheel
muss, um sie zu laden.
quelle
Antworten:
Von
man launchctl
Fix ist
quelle
chmod 644
?Seltsamerweise war die Verwendung
sudo
Ihr Problem. Durch die Verwendung vonsudo
waren Sie nicht länger Sie selbst, also nicht der Eigentümer Ihrer eigenen Datei. Entfernen Siesudo
, wiederholen Sie den Befehl und es sollte gut geladen werden. Entschuldigen Sie die philosophische Herangehensweise an alles.quelle
Die Lösung gefunden.
Der richtige Befehl ist in diesem Fall
Und zu entladen,
Ich weiß nicht, warum
launchctl load
root erforderlich ist, aber das Laden / Entladen ist sowieso veraltet.quelle
chmod
& noch gebrauchtchown
?Ich bin auch darauf gestoßen und habe versucht, einen Benutzer zu verwenden, der sich nicht im Besitz von Root befindet .plist (wie man es tun sollte)
Ich war remote auf diesem Computer angemeldet, als ich NICHT an der Konsole (ohne Kopf) angemeldet war. Dies schien mein Problem zu sein. Zumindest für die vom Benutzer verwalteten Dienste muss der Benutzer auf dem Hauptbildschirm angemeldet sein Login über Remote-Management, da es sich um ein Headless-Gerät handelt)
IMO, wenn Sie möchten, dass dies auch dann ausgeführt wird, wenn Sie nicht persönlich vor Ort sind, um sich einzuloggen, haben Sie folgende Optionen:
Melden Sie sich automatisch bei Ihrem Konto an (beachten Sie die Auswirkungen auf die Sicherheit, auch ohne das in einer der Antworten angegebene UserName-Tag).
Machen Sie die Dateien wie in den verschiedenen Vorschlägen angegeben zu Root-Dateien (setzen Sie den Benutzer mit Benutzername auf Ihren zurück, wie Sie es bereits getan haben).
quelle
Hier ist eine dumme Idee.
Ich hatte nur den gleichen Fehler, auch nach dem Upgrade auf Yosemite. Ich habe fälschlicherweise angenommen, dass die .plist-Datei fehlerhaft ist, obwohl aus irgendeinem Grund die Binärdatei, auf die ich mich in der Plist beziehe (in meinem Fall Cassandra), ihr ausführbares Bit verloren hat.
chmod + x'ing es repariert es.
Wahrscheinlich nicht dein Problem, aber vielleicht einen Versuch wert :)
quelle
Entfernen Sie den
UserName
Schlüssel und die Schnur.Das Problem ist, dass der
UserName
Schlüssel nur verwendet werden kann, wenn der Prozess von root gestartet wird. Es kann nur als root gestartet werden, wenn die plist im Besitz von root ist. Grundsätzlich wird der Prozess von root gestartet und dann dem angegebenen Benutzer zugeordnet. Wenn Sie möchten, dass dieser Prozess als Sie selbst ausgeführt wird, legen Sie die Plist in den Ordner ~ / Library / LaunchAgents und entfernen Sie den UserName-Schlüssel.quelle
Haben Sie versucht, einen Agenten mit Benutzerberechtigungen manuell neu zu laden? Ich verstehe nicht ganz, warum dies erforderlich ist, aber ich glaube, dass Sie an Ihre Benutzerdomäne gebunden sein müssen (an die Sie anscheinend nicht gebunden sind, wenn Sie als Root ausgeführt werden). Das erneute Anschließen dieser Funktionen hat bei mir funktioniert.
Sie würden dies wie folgt verwenden:
Mit bsexec werden Sie wieder in Ihre Domäne aufgenommen und können die Aufgabe als Benutzer-Launchagent hinzufügen.
quelle