Risposte:
Ho trovato la soluzione
sudo launchctl log level debug
e dopo questo
tail -f /var/log/system.log
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 .
Su OS X 10.11 (El Capitan), puoi utilizzare sudo launchctl debug <service-target> --stdout --stderr
per 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.localmon
servizio si arrestasse in modo anomalo all'avvio (lo era), potrei chiamare quanto segue per launchctl
reindirizzare 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.plist
passo due poiché il presunto uncache
sottocomando 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 debug
esce con Could not find domain for
me