Warum wird meine Konfigurations-Plist-Datei nicht mithilfe von launchctl als Dienst 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?
load -w
wird helfen "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." - Sie haben also den Wert für geändertLabel
, Ich hoffe? Sind Sie sicher, dass es sich nicht um einen On-Demand-Service handelt? Sie müssen uns das zeigenplist
Datei. Ebenfalls,launchctl enable
erwartet keinen Pfad; Sehen Sie Dinge wieuser/<uid>/[service-name]
imman launchctl
oder sehen Was ist der Unterschied zwischen einemservice-name
und einservice-target
? ..plist
Datei ist NICHT von Gruppe und Welt beschreibbar. Und nebenbei, wenn es nicht irgendein von Apple bereitgestellter Dienst ist, dann verwenden Siecom.apple
wird in der Zukunft nur verwirrend sein ...File exists
Ist nicht eine Ausgabe des Prozesses, den Sie ausführen möchten? Was sagt Console? Am Ende: Wir müssen das nur sehenplist
Datei.Antworten:
Ich bin heute auf ähnliche Probleme gestoßen.
Entladen Sie einfach den Dienst und laden Sie ihn erneut
File exists
Problem.Es sieht so aus, als müssten Sie jedes Mal, wenn Sie eine plist-Datei aktualisieren, dies tun.
quelle
launchd
kann leicht in "komische" Zustände gelangen.load
meint das lesen die Konfigurationsdatei und möglicherweise Zeitplan ein Startunload
meint dasstop
und Deaktivieren Sie die Konfigurationsdateistart
startet den Dienst (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 folgendermaßen:
Das
-w
bedeutet "Schreiben", was bedeutet, dass die Änderung einen Neustart bewirkt (lädt jedes Login oder Boot ... oder wird beim Login oder Boot nicht mehr geladen).Wenn es sich um einen Service auf Systemebene handelt (in
/Library/LaunchDaemons
oder/Library/LaunchAgents
Möglicherweise müssen Sie es mit tunsudo
(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 dazu führt, dass
start
aufload
istRunAtLoad
(undKeepAlive
hält es weiter, wenn es aus irgendeinem Grund stirbt)Es ist manchmal schwierig, die Debug-Protokollierung von launchctl selbst, aber den Schlüsseln, abzurufen
StandardErrorPath
undStandardOutPath
Sie können zumindest 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, beschreibbar ist.Da sie so schwer zu debuggen sind, würde ich empfehlen Start Steuerung oder ins Leben gerufen und mischen Sie das mit einem gesunden Lesen von launchd.info .
Außerdem gibt es hier einige Debugging-Hinweise: 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:
quelle