Como posso ver os resultados dos meus trabalhos cron?

60

Eu vejo muitos guias sobre como executar o crontab, mas o que eu preciso agora é aprender como

  1. Encontre arquivos de log sobre tarefas agendadas
  2. Configure o que é registrado
por Zombies 21.03.2010 / 04:07

6 respostas

65

Verifique se os programas que você executa com o cron possuem seus próprios arquivos de log. Se, se não escreverem sua saída para as saídas padrão, você poderá redirecioná-las para arquivos ou enviá-las para você. Dentro de crontabs redirecionamento de shell padrão funciona.

Por exemplo para redirecionar a saída de erro de some_job.sh para some_job.err e descartar a saída padrão (ou seja, enviá-la para /dev/null ), adicione o seguinte redirecionamento ao seu crontab

 33 3 * * * /path/to/some_job.sh 1> /dev/null 2> /other/path/to/some_job.err

ou para enviá-lo para você (se mail estiver disponível)

 33 3 * * * /path/to/some_job.sh 1> /dev/null 2>&1 | mail -s "cron output" [email protected]
    
por 21.03.2010 / 05:30
7

A maioria dos daemons cron em plataformas com as quais trabalhei envia por e-mail automaticamente o stdout / stderr de tarefas cron do usuário para o usuário cujo crontab o trabalho veio. Eu esqueço o que acontece com todo o sistema (tarefas agendadas não específicas do usuário de / etc / crontab). A questão é que as pessoas nem sempre configuram um daemon mailer (ou seja, um Mail Transfer Agent (MTA) como sendmail, qmail ou postfix) na maioria dos SOs parecidos com Unix. Assim, os e-mails de saída da tarefa do cron simplesmente morrem em uma pasta de spool de correio local em algum lugar, se chegarem até mesmo . Assim, uma resposta pode ser apenas para iniciar seu daemon mailer, e talvez ter certeza de que você tem um arquivo ~ / .forward para encaminhar seu correio local para sua conta de e-mail "real".

Se você quiser que seus trabalhos sejam gravados em arquivos de log específicos, você pode usar o redirecionamento padrão como @honk sugerido ou, supondo que seu cron job seja um shell script, você pode ter seu logger de chamadas de script (1) ou syslog ( 1) ou qualquer outra ferramenta de linha de comando fornecida pelo sistema operacional para enviar mensagens arbitrárias para o syslog. Então você pode usar os métodos internos do sistema operacional para configurar quais tipos de mensagens são registrados onde, talvez editando o /etc/syslog.conf.

A maioria dos meus trabalhos cron invocam scripts bash que escrevi especificamente para o propósito de serem iniciados pelo cron por um motivo específico. Nesses, especialmente quando eu estou inicialmente escrevendo e depurando-os, eu gosto de usar o "set -vx" do bash para fazer com que a forma não expandida e expandida de cada linha do shell script seja gravada no stdout antes de ser executada. Observe que os scripts de shell iniciados no cron são considerados shells não-de-login e não-interativos, assim seus scripts de inicialização de shell padrão, como .bashrc e .profile, não são executados. Se você usar o bash e quiser o bash para executar um script de inicialização, você deve definir uma variável de ambiente "BASH_ENV = / path / to / my / startup / script" no seu crontab antes da linha onde você define o job.

    
por 22.03.2010 / 00:11
6

As tarefas que o cron está executando são responsáveis pelo seu próprio registro.

    
por 21.03.2010 / 04:19
1

Acho que redirecionar dentro do cron-file pode não ser a melhor opção neste caso.

Frequentemente, você deseja que a especificação de criação de log seja co-localizada com o script de tarefa cron. Nesse caso, sugiro o seguinte:

#!/bin/bash
exec &>> capture-log.txt
echo "Running cron-job foo at $(date)"
...
<rest of script>

Isso acrescenta a saída da tarefa cron ao arquivo capture-log.txt.

    
por 21.03.2013 / 10:40
1

Eu prefiro receber relatórios por e-mail sobre tarefas agendadas. Basta colocar

[email protected]

no crontab e você receberá um email. É claro que você precisa ter um e-mail configurado para sua conta.

    
por 04.07.2014 / 14:36
1

A maneira mais simples é capturar erros de impressão e savem em um arquivo. Eu tenho um cronjob que chama uma linha de comando php, assim:

1 0 * * * php /pathOfMyApp/index.php controllerName functionName > / pathOfMyApp / log / myErrorLog 2 > & 1

A parte antes de '>' é meu cronjob e depois de '>' é a captura e salvar em um arquivo localizado em uma pasta de log na raiz do meu projeto, mas poderia estar no lugar que você deseja. Esteja alerta: toda vez que o cronjob for chamado, ele sobrescreverá o último log. Você pode usar '> >' para escrever no final de um arquivo existente ou procurar pelo comando do terminal 'cat'.

Se o seu crontab usa 'curl' ou 'wget' e se refere a um link, você pode procurar em / var / log / httpd / appName para log de acesso, se o cron estiver retornando com 500 ou 400 deve estar errado.

Por fim, você pode verificar / var / log / messages também.

    
por 14.04.2015 / 21:38