Como faço para ativar o logging launchd no OS X?

28

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 .

    
por sorin 22.09.2010 / 15:38

3 respostas

24

Eu encontrei a solução

 sudo launchctl log level debug 

e depois disso

 tail -f /var/log/system.log
    
por 22.09.2010 / 15:47
15

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 .

    
por 11.06.2015 / 23:16
12

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"

    
por 15.09.2016 / 01:06