Wie aktiviere ich die Launchd-Protokollierung unter OS X?

35

Wie aktiviere ich die Launchd-Protokollierung unter OS X 10.6?

Ich habe einen neuen Daemon hinzugefügt, der nicht richtig startet (Status ist 1).

Ich möchte das Problem beheben, konnte jedoch keine launchdProtokolle finden . Sie befinden sich nicht in /var/log/launchd.log.

Sorin
quelle

Antworten:

26

Ich habe die Lösung gefunden

 sudo launchctl log level debug 

und danach

 tail -f /var/log/system.log
Sorin
quelle
1
Ich habe festgestellt, dass dieses Betriebssystem genau wie alles andere Admin benötigt. War total auf der Suche nach diesem nach einem Tag des Schreiens "WTF wo ist die wortreiche Flagge!" OSX rockt zwar, ist aber schwierig in den Griff zu bekommen. Thx +1
chiggsy
Follow up, FYI: Dies funktioniert auch mit OS X 10.7.2. Vielen Dank.
Alan W. Smith
Ich hatte Probleme mit meinen Leopard-Servern und dachte, dass mit meiner launchd-plist etwas nicht stimmt (obwohl dieselbe plist in Snow Leopard funktioniert). Ich bin zufällig darauf
gestoßen
27
Dies funktioniert seit 10.10 Yosemite nicht mehr. launchctl version: Darwin System Bootstrapper 2.0.0: 9. September 16:30:56 PDT 2014
JeanMertz
9
@ JeanMertz - irgendeine Alternative?
Umang
20

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 .

Peter
quelle
17

Unter OS X 10.11 (El Capitan) können Sie die sudo launchctl debug <service-target> --stdout --stderreinmalige Protokollierung aktivieren, wenn Sie die von @peter vorgeschlagene Dateisystemoption nicht verwenden möchten.

Viele Dinge sind in der aktuellen Implementierung von anders launchctlund das <service-target>ist irgendwie seltsam. Angenommen, ich habe einen lokalen Dienst, den ich ~/Library/LaunchAgents/dev.localmon.plistunter "label" konfiguriere dev.localmon. Das <service-target>ist gui/$UID/dev.localmon, wo $UIDist Ihre Benutzer-ID, die, da Sie dies auf der CLI ausführen, Ihre Shell für Sie interpolieren wird.

Angenommen also, mein dev.localmonDienst stürzt beim Start ab (es war), dann könnte ich Folgendes aufrufen, um launchctldie 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.plistzweistufigen Befehl verwenden, da der angebliche uncacheUnterbefehl 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"

chbrown
quelle
sudo launchctl debuggeht mit Could not find domain forfür mich
Tom