Eu encontrei a solução
sudo launchctl log level debug
e depois disso
tail -f /var/log/system.log
Como faço para ativar o logging launchd no OS X 10.6?
Eu adicionei um novo daemon que não está sendo iniciado corretamente (o status é 1
).
Eu quero depurar o problema, mas não consegui encontrar launchd
logs, eles não estão em /var/log/launchd.log
.
Eu encontrei a solução
sudo launchctl log level debug
e depois disso
tail -f /var/log/system.log
Supondo que você esteja tentando registrar seu processo em vez de iniciar-se, se você incluir as seguintes linhas no arquivo plst do launchd:
<key>StandardOutPath</key>
<string>/path/to/logfile.log</string>
<key>StandardErrorPath</key>
<string>/path/to/another_logfile.log</string>
e recarregue o processo, qualquer registro ou impressão que você tenha interno ao seu script será capturado em um desses dois arquivos sempre que for executado. apesar de girar os arquivos parece ser com você. Como você poderia esperar, se você usar o mesmo arquivo nas duas instâncias, ele registrará o erro e a saída padrão no mesmo local.
Veja: Depurando a seção Jobs iniciados em Criando Daemons e Agentes de Lançamento .
No OS X 10.11 (El Capitan), você pode usar sudo launchctl debug <service-target> --stdout --stderr
para habilitar o log one-off, se você não quiser pegar a opção de sistema de arquivos sugerida por @peter.
Muitas coisas são diferentes na implementação atual de launchctl
, e o <service-target>
é meio estranho. Por exemplo, suponha que eu tenha um serviço local que eu configure em ~/Library/LaunchAgents/dev.localmon.plist
, que tem o "rótulo" dev.localmon
. Seu <service-target>
é gui/$UID/dev.localmon
, onde $UID
é seu ID de usuário, que, como você está executando isso na CLI, seu shell interpola para você.
Então supondo que meu serviço dev.localmon
estava travando na inicialização (era), eu poderia chamar o seguinte para ter launchctl
canalizado o stdout e stderr do processo para o meu shell na próxima vez (e somente na próxima vez) começa:
sudo launchctl debug gui/$UID/dev.localmon --stdout --stderr
Desde que trava com os TTYs abertos e prontos, vá para outro terminal e execute:
launchctl start dev.localmon
# start is a legacy command and doesn't use the fancy new service-target notation
Então, de volta ao primeiro terminal, você deve ver a saída. (Estranhamente, não fecha quando o processo de serviço morre, então você terá que Ctrl-C.)
Btw, uma vez que você consertou seu arquivo de configuração com qualquer PATH ou ambiente estava quebrando o serviço antes, você ainda precisa usar a antiga launchctl unload ~/Library/LaunchAgents/dev.localmon.plist && launchctl load ~/Library/LaunchAgents/dev.localmon.plist
duas etapas, já que o subcomando uncache
da documentação tem o seguinte efeito:
Command is not yet implemented.
Yay para a estratégia de lançamento pós-emprego da Apple: "Mova-se rapidamente e quebre as coisas"