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 --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