Onde os erros do cron são registrados?

Onde os erros do cron são registrados?

Se eu configurar cronos trabalhos incorretamente, eles parecerão falhar silenciosamente. Onde devo procurar um log de erros para entender o que deu errado?

Responder1

Como outros apontaram, cronenviaremos por e-mail a saída de qualquer programa executado (se houver alguma saída). Então, se você não obtiver nenhum resultado, existem basicamente três possibilidades:

  1. crondnão consegui nem iniciar um shell para executar o programa ou enviar e-mail
  2. crondteve problemas para enviar a saída ou a correspondência foi perdida.
  3. o programa não produziu nenhuma saída (incluindo mensagens de erro)

O caso 1. é muito improvável, mas algo deveria ter sido escrito nos logs do cron. O Cron possui um recurso de syslog próprio reservado, portanto, você deve dar uma olhada /etc/syslog.conf(ou no arquivo equivalente em sua distribuição) para ver para onde as mensagens do recurso cronsão enviadas. Destinos populares incluem /var/log/crone /var/log/messages./var/log/syslog

No caso 2., você deve inspecionar os logs do daemon do mailer: as mensagens do daemon Cron geralmente aparecem como from root@yourhost. Você pode usar uma MAILTO=...linha no arquivo crontab para que o cron envie e-mail para um endereço específico, o que deve facilitar o grep dos logs do daemon do mailer. Por exemplo:

[email protected]
00 15 * * *  echo "Just testing if crond sends email"

No caso 3., você pode testar se o programa foi realmente executado anexando outro comando cujo efeito você pode verificar facilmente: por exemplo,

00 15 * * * /a/command; touch /tmp/a_command_has_run

então você pode verificar se crondrealmente executou algo olhando o mtime de /tmp/a_command_has_run.

Responder2

Você sempre pode enviar explicitamente a saída do trabalho para um arquivo de log:

0 8 * * * /usr/local/bin/myjob > /var/log/myjob.log 2>&1

Tenha em mente que isso substituirá o comportamento do email mencionado anteriormente, porque o próprio crond não receberá nenhuma saída do trabalho. Se você quiser manter esse comportamento, você deve dar uma olhada em tee(1).

Responder3

Se você não está vendo os e-mails, você pode estar enviando spam para root@suaempresa com erros que podem ser bastante irritantes para as pessoas que usam essa conta para monitoramento. Tente enviar a saída para o Syslog:

*/5 * * * * yourcronjob 2>&1 | /usr/bin/logger -t yourtag

Em seguida, aguarde a execução do cronjob e procure o erro em /var/log/messages (ou /var/log/user.log em alguns sistemas).

Isso funciona muito bem para mensagens de erro com apenas 1 a 2 linhas, como "yourcronjob: comando não encontrado". Ele também faz uso de sua infraestrutura de syslog existente (Logrotation, syslogging central, Splunk, etc.). Também reduz o spam de e-mail para o root.

Pode não ser uma boa solução se o seu cronjob gerar centenas de linhas de saída.

Responder4

A configuração padrão do cron enviará a você um email com a saída do seu programa. Se isso falhar, você pode tentar agrupar seu programa com falha em um script de shell que garanta que o programa não falhe e poderá registrar ainda mais a saída.

Esta é uma configuração configurável em algumas implementações do cron.

informação relacionada