Come posso attivare la registrazione launchd su OS X?


35

Come posso attivare la registrazione launchd su OS X 10.6?

Ho aggiunto un nuovo demone che non si avvia correttamente (lo stato è 1).

Voglio eseguire il debug del problema ma non sono stato in grado di trovare i launchdregistri, non sono presenti /var/log/launchd.log.

Risposte:


26

Ho trovato la soluzione

 sudo launchctl log level debug 

e dopo questo

 tail -f /var/log/system.log

1
Mi sono reso conto che questo sistema operativo necessita di amministrazione, proprio come qualsiasi altra cosa. Lo stavo cercando dopo una giornata di urla "WTF dov'è la bandiera dettagliata!" OSX oscilla, certo, ma difficile da gestire. Thx +1
Chiggsy,

FYI: Funziona anche con OS X 10.7.2. Grazie.
Alan W. Smith,

Ho avuto problemi con i miei server Leopard e ho pensato che ci fosse qualcosa di sbagliato nel mio programma di avvio (anche se lo stesso programma funziona in Snow Leopard). Mi è capitato di imbattermi in questo e funziona come un incanto :)
icasimpan,

27
Questo non funziona più dal 10.10 Yosemite. Versione launchctl: Darwin System Bootstrapper 2.0.0: mar 9 set 16:30:56 PDT 2014
JeanMertz

9
@JeanMertz - qualche alternativa?
Umang,

20

Supponendo che tu stia provando a registrare il tuo processo anziché lanciarlo stesso, se includi le seguenti righe nel file plist di launchd:

<key>StandardOutPath</key>
<string>/path/to/logfile.log</string>
<key>StandardErrorPath</key>
<string>/path/to/another_logfile.log</string>

e ricaricare il processo, ogni registrazione o stampa interna allo script verrà acquisita in uno di quei due file ogni volta che viene eseguita. anche se la rotazione dei file sembra dipendere da te. come ci si potrebbe aspettare, se si utilizza lo stesso file in entrambi i casi, registrerà sia l'errore che lo stdout nello stesso posto.

Vedere: Debug della sezione Lavori avviati in Creazione di daemon e agenti di lancio .


17

Su OS X 10.11 (El Capitan), puoi utilizzare sudo launchctl debug <service-target> --stdout --stderrper abilitare la registrazione una tantum, se non vuoi prendere l'opzione del filesystem suggerita da @peter.

Molte cose sono diverse nell'attuale implementazione di launchctl, ed <service-target>è un po 'strano. Ad esempio, supponiamo di avere un servizio locale in cui configuro ~/Library/LaunchAgents/dev.localmon.plist, che ha la "etichetta" dev.localmon. La sua <service-target>è gui/$UID/dev.localmon, dove $UIDè il vostro ID utente, che, dal momento che si sta eseguendo questo al CLI, la shell interpolerà per voi.

Quindi supponendo che il mio dev.localmonservizio si arrestasse in modo anomalo all'avvio (lo era), potrei chiamare quanto segue per launchctlreindirizzare lo stdout del processo e stderr nella mia shell la volta successiva (e solo la volta successiva) il servizio si avvia:

sudo launchctl debug gui/$UID/dev.localmon --stdout --stderr

Dal momento che si blocca con i TTY aperti e pronti, vai su un altro terminale ed esegui:

launchctl start dev.localmon
# start is a legacy command and doesn't use the fancy new service-target notation

Quindi, nel primo terminale, dovresti vedere l'output. (Stranamente, non si chiude quando il processo di servizio termina, quindi dovrai Ctrl-C.)

A proposito, una volta risolto il tuo file di configurazione con qualunque PATH o ambiente stesse rompendo il servizio prima, devi ancora usare il vecchio launchctl unload ~/Library/LaunchAgents/dev.localmon.plist && launchctl load ~/Library/LaunchAgents/dev.localmon.plistpasso due poiché il presunto uncachesottocomando della documentazione ha il seguente effetto:

Il comando non è ancora implementato.

Yay per la strategia di rilascio post-Jobs di Apple: "Muoviti velocemente e spezza le cose"


sudo launchctl debugesce con Could not find domain forme
Tom,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.