Antworten:
Ich habe die Lösung gefunden
sudo launchctl log level debug
und danach
tail -f /var/log/system.log
Angenommen, Sie versuchen, Ihren Prozess zu protokollieren, anstatt ihn selbst zu starten, wenn Sie die folgenden Zeilen in die Datei launchd plist aufnehmen:
<key>StandardOutPath</key>
<string>/path/to/logfile.log</string>
<key>StandardErrorPath</key>
<string>/path/to/another_logfile.log</string>
Wenn Sie den Prozess neu laden, werden alle in Ihrem Skript vorhandenen Protokollierungen oder Druckvorgänge bei jeder Ausführung in einer dieser beiden Dateien aufgezeichnet. Das Drehen der Dateien scheint Ihnen überlassen zu sein. Wie zu erwarten, werden Fehler und stdout an derselben Stelle protokolliert, wenn Sie in beiden Instanzen dieselbe Datei verwenden.
Siehe: Debuggen von gestarteten Jobs im Abschnitt Erstellen von Start-Daemons und Agents .
Unter OS X 10.11 (El Capitan) können Sie die sudo launchctl debug <service-target> --stdout --stderr
einmalige Protokollierung aktivieren, wenn Sie die von @peter vorgeschlagene Dateisystemoption nicht verwenden möchten.
Viele Dinge sind in der aktuellen Implementierung von anders launchctl
und das <service-target>
ist irgendwie seltsam. Angenommen, ich habe einen lokalen Dienst, den ich ~/Library/LaunchAgents/dev.localmon.plist
unter "label" konfiguriere dev.localmon
. Das <service-target>
ist gui/$UID/dev.localmon
, wo $UID
ist Ihre Benutzer-ID, die, da Sie dies auf der CLI ausführen, Ihre Shell für Sie interpolieren wird.
Angenommen also, mein dev.localmon
Dienst stürzt beim Start ab (es war), dann könnte ich Folgendes aufrufen, um launchctl
die stdout- und stderr-Anweisung des Prozesses beim nächsten (und erst beim nächsten) Start des Dienstes in meine Shell zu leiten:
sudo launchctl debug gui/$UID/dev.localmon --stdout --stderr
Da dies bei den Open-and-Ready-TTYs hängt, gehen Sie zu einem anderen Terminal und führen Sie Folgendes aus:
launchctl start dev.localmon
# start is a legacy command and doesn't use the fancy new service-target notation
Dann, zurück im ersten Terminal, sollten Sie die Ausgabe sehen. (Seltsamerweise wird es nicht geschlossen, wenn der Serviceprozess beendet wird. Daher müssen Sie Strg-C drücken.)
Übrigens, sobald Sie Ihre Konfigurationsdatei mit dem Pfad oder der Umgebung repariert haben, die zuvor den Dienst unterbrochen haben, müssen Sie immer noch den alten launchctl unload ~/Library/LaunchAgents/dev.localmon.plist && launchctl load ~/Library/LaunchAgents/dev.localmon.plist
zweistufigen Befehl verwenden, da der angebliche uncache
Unterbefehl der Dokumentation den folgenden Effekt hat:
Befehl ist noch nicht implementiert.
Yay for Apples Strategie nach der Veröffentlichung von Jobs: "Schnell vorankommen und Dinge kaputt machen"
sudo launchctl debug
geht mit Could not find domain for
für mich