Ich bin heute auf ähnliche Probleme gestoßen.
Entladen Sie einfach den Dienst und laden Sie ihn erneut, um das File exists
Problem zu lösen.
Es sieht so aus, als würden Sie jedes Mal, wenn Sie eine plist-Datei aktualisieren, dies tun.
Warum wird meine Konfigurationsplist-Datei nicht als Dienst mit launchctl geladen?
Ich verwende OSX Yosemite und habe dieses hervorragende Tutorial zur Verwendung von launchctl gelesen: http://nathangrigg.net/2012/07/schedule-jobs-using-launchd/
Ich habe eine korrekte .plist-Datei mit der Konfiguration des Dienstes erstellt (ich weiß, dass dies korrekt ist, da es sich um eine fast genaue Kopie einer funktionierenden plist-Konfigurationsdatei handelt, die ich vor einigen Jahren erstellt habe). Ich tippe ein
launchctl load ~/Library/LaunchAgents/com.apple.myservice.plist
und antworte
~/Library/LaunchAgents/com.apple.myservice.plist: File exists
Das ist nicht schrecklich beschreibend, aber ich gehe und tippe
launchctl start com.apple.myservice
und es gibt keine Ausgabe und nichts passiert. Ich habe auch versucht zu benutzen
launchctl enable ~/Library/LaunchAgents/com.apple.myservice.plist
und ich bekomme nur eine
Usage: launchctl enable <service-target>
In Beantwortung.
Kann jemand bitte mit der richtigen Syntax antworten, um einen Launchd-Dienst unter OSX Yosemite zu laden?
Ich bin heute auf ähnliche Probleme gestoßen.
Entladen Sie einfach den Dienst und laden Sie ihn erneut, um das File exists
Problem zu lösen.
Es sieht so aus, als würden Sie jedes Mal, wenn Sie eine plist-Datei aktualisieren, dies tun.
launchd
kann leicht in "komische" Zustände gelangen.
load
bedeutet, die Konfigurationsdatei zu lesen und möglicherweise einen Start zu planen .unload
bedeutet stop
und Unschedule der Konfigurationsdateistart
wird den Dienst starten (ich glaube den Zeitplan ignorieren)stop
stoppt den Dienst (erneut den Zeitplan ignorierend)Wenn Sie es "neustarten" wollen, entladen und laden Sie die Konfiguration im Allgemeinen wie folgt:
launchctl unload -w ~/Library/LaunchAgents/com.apple.myservice.plist launchctl load -w ~/Library/LaunchAgents/com.apple.myservice.plist
Das -w
bedeutet "Schreiben", was bedeutet, dass die Änderung einen Neustart bewirkt (wird bei jedem Login oder Startvorgang geladen ... oder beim Anmelden oder Startvorgang nicht mehr geladen).
Wenn es sich um einen Service auf Systemebene handelt (in /Library/LaunchDaemons
oder /Library/LaunchAgents
Sie müssen es möglicherweise mit erledigen sudo
(und wenn Sie es versehentlich ohne sudo getan haben, müssen Sie es möglicherweise ohne sudo entladen und anschließend mit sudo erneut laden).
Der Schlüssel in einer Datei, die es bewirkt, dass start
auf load
ist RunAtLoad
(und KeepAlive
hält es läuft, wenn es aus irgendeinem Grund stirbt)
<key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/>
Es ist manchmal schwierig, die Debug-Protokollierung von launchctl selbst zu erhalten, aber die Schlüssel StandardErrorPath
und StandardOutPath
können Ihnen zumindest helfen zu wissen, ob Ihre Anwendung aufgrund fehlender oder fehlerhafter Informationen (z. B. einer nicht erweiterten Umgebungsvariablen oder eines nicht beschreibbaren Pfads) stirbt. Stellen Sie nur sicher, dass der von Ihnen angegebene Pfad vom Benutzer, der den Prozess ausführt, schreibbar ist.
<key>StandardErrorPath</key> <string>/tmp/appname-error.log</string> <key>StandardOutPath</key> <string>/tmp/appname-info.log</string>
Weil sie so schwer zu debuggen ist, dann würde ich mit empfehlen LaunchControl oder ins Leben gerufen und mit einem gesunden Lektüre mische launchd.info .
Außerdem finden Sie hier einige Hinweise zum Debuggen: https://serverfault.com/questions/183589/how-do-i-activate-launchd-logging-on-os-x
Ich habe es selbst noch nicht ausprobiert, aber diese Lösung sieht am einfachsten aus:
sudo launchctl log level debug tail -f /var/log/system.log