
Se eu configurar cron
os trabalhos incorretamente, eles parecerão falhar silenciosamente. Onde devo procurar um log de erros para entender o que deu errado?
Responder1
Como outros apontaram, cron
enviaremos 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:
crond
não consegui nem iniciar um shell para executar o programa ou enviar e-mailcrond
teve problemas para enviar a saída ou a correspondência foi perdida.- 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 cron
são enviadas. Destinos populares incluem /var/log/cron
e /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 crond
realmente 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.