Verifique se os programas que você executa com o cron possuem seus próprios arquivos de log. Se não o fizerem, mas gravar sua saída nas saídas padrão, você poderá redirecioná-las para arquivos ou enviá-las por e-mail. O redirecionamento de shell padrão do crontabs interno funciona.
Por exemplo, para redirecionar a saída de erro de some_job.sha some_job.erre descartando a saída padrão (ou seja, enviá-lo para /dev/null) adicione o seguinte redirecionamento para o seu crontab
Foi assim que sempre resolvi meus problemas com o cron.
physicsmichael
Esse segundo exemplo está certo? Não redirecionaria tudo para /dev/null?
Timmmm
7
@ Timmmm: Eu trabalho. Primeiro, ele redireciona tudo, desde some_job.sho stdout para /dev/nulle somente depois do stderr para o stdout (que agora não contém mais nada). Dessa forma, apenas seu stderr termina em stdout e é repassado para mail.
Benjamin Bannier
9
A maioria dos daemons cron em plataformas com as quais trabalhei enviaram por email automaticamente o stdout / stderr dos trabalhos cron do usuário para o usuário de quem o trabalho foi feito. Eu esqueço o que acontece com todo o sistema (tarefas cron não específicas do usuário em / etc / crontab). O problema é que as pessoas nem sempre configuram um daemon de mala direta (ou seja, um MTA) como sendmail, qmail ou postfix) na maioria dos sistemas operacionais semelhantes ao Unix. Portanto, os emails de saída da tarefa cron simplesmente morrem em uma pasta de spool de email local em algum lugar, se eles chegarem tão longe. Portanto, uma resposta pode ser apenas para ativar o seu daemon de mala direta e talvez tenha um arquivo ~ / .forward para encaminhar sua correspondência local para a sua conta de email "real".
Se você deseja que seus trabalhos sejam gravados em arquivos de log específicos, é possível usar o redirecionamento de saída padrão, como @honk sugerido, ou, supondo que seu trabalho cron seja um script de shell, você pode ter seu log de chamadas de script (1) ou syslog (1) ou qualquer outra ferramenta de linha de comando que seu sistema operacional for capaz de enviar mensagens arbitrárias para o syslog. Então você pode usar os métodos internos do seu sistema operacional para configurar quais tipos de mensagens são registradas onde, talvez editando /etc/syslog.conf.
A maioria dos meus trabalhos cron invocam scripts bash que escrevi especificamente com a finalidade de serem iniciados pelo cron por um motivo específico. Nesses, especialmente quando eu estou escrevendo e depurando inicialmente, eu gosto de usar o "set -vx" do bash para fazer com que a forma expandida e não expandida de cada linha do script de shell seja gravada no stdout antes de ser executada. Observe que os scripts de shell iniciados no cron são considerados shells não interativos e sem logon; portanto, seus scripts de inicialização do shell padrão, como .bashrc e .profile, não são executados. Se você usa o bash e deseja que o bash execute um script de inicialização, defina uma variável de ambiente "BASH_ENV = / caminho / para / meu / inicialização / script" em seu crontab antes da linha em que você define o trabalho.
Isto está correto. Pode-se usar o mailcomando para ler mensagens da linha de comando. Ou olhe /var/spool/mail. Mas se você instalou o postfix ou outro mailer que não o sendmail padrão, é necessária outra maneira de ler as mensagens.
21415 akostadinov
Por que precisamos de um agente de serviço de correio apenas para isso? mail -s "cron output" [email protected]funciona muito bem: /
Martin Konecny 21/03
No CentOS, minha saída cron é "enviada" para / var / spool / mail. Veja executando, less $MAILse você deseja ver a saída do cron para o usuário atual ou less /var/spool/mail/rootse deseja ver a saída do cron para comandos em execução como root.
Sffc 7/07
5
As tarefas que o cron está executando são responsáveis por seu próprio log.
A parte antes de '>' é o meu cronjob e depois de '>' é a captura e o salvamento em um arquivo localizado em uma pasta de log na raiz do meu projeto, mas pode estar no local desejado. Esteja alerta: sempre que o cronjob for chamado, ele substituirá o último log. Você pode usar '>>' para escrever no final de um arquivo existente ou procurar o 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 por access-log, se o cron retornar com 500 ou 400 deve estar errado.
Por fim, você também pode verificar / var / log / messages.
Acho que isso costuma ser o mais fácil de ativar e desativar para depuração. Normalmente, uso apenas o nome de usuário @ localhost para o endereço de email.
Respostas:
Verifique se os programas que você executa com o cron possuem seus próprios arquivos de log. Se não o fizerem, mas gravar sua saída nas saídas padrão, você poderá redirecioná-las para arquivos ou enviá-las por e-mail. O redirecionamento de shell padrão do crontabs interno funciona.
Por exemplo, para redirecionar a saída de erro de
some_job.sh
asome_job.err
e descartando a saída padrão (ou seja, enviá-lo para/dev/null
) adicione o seguinte redirecionamento para o seu crontabou enviá-lo para você (se
mail
estiver disponível)fonte
/dev/null
?some_job.sh
o stdout para/dev/null
e somente depois do stderr para o stdout (que agora não contém mais nada). Dessa forma, apenas seu stderr termina em stdout e é repassado paramail
.A maioria dos daemons cron em plataformas com as quais trabalhei enviaram por email automaticamente o stdout / stderr dos trabalhos cron do usuário para o usuário de quem o trabalho foi feito. Eu esqueço o que acontece com todo o sistema (tarefas cron não específicas do usuário em / etc / crontab). O problema é que as pessoas nem sempre configuram um daemon de mala direta (ou seja, um MTA) como sendmail, qmail ou postfix) na maioria dos sistemas operacionais semelhantes ao Unix. Portanto, os emails de saída da tarefa cron simplesmente morrem em uma pasta de spool de email local em algum lugar, se eles chegarem tão longe. Portanto, uma resposta pode ser apenas para ativar o seu daemon de mala direta e talvez tenha um arquivo ~ / .forward para encaminhar sua correspondência local para a sua conta de email "real".
Se você deseja que seus trabalhos sejam gravados em arquivos de log específicos, é possível usar o redirecionamento de saída padrão, como @honk sugerido, ou, supondo que seu trabalho cron seja um script de shell, você pode ter seu log de chamadas de script (1) ou syslog (1) ou qualquer outra ferramenta de linha de comando que seu sistema operacional for capaz de enviar mensagens arbitrárias para o syslog. Então você pode usar os métodos internos do seu sistema operacional para configurar quais tipos de mensagens são registradas onde, talvez editando /etc/syslog.conf.
A maioria dos meus trabalhos cron invocam scripts bash que escrevi especificamente com a finalidade de serem iniciados pelo cron por um motivo específico. Nesses, especialmente quando eu estou escrevendo e depurando inicialmente, eu gosto de usar o "set -vx" do bash para fazer com que a forma expandida e não expandida de cada linha do script de shell seja gravada no stdout antes de ser executada. Observe que os scripts de shell iniciados no cron são considerados shells não interativos e sem logon; portanto, seus scripts de inicialização do shell padrão, como .bashrc e .profile, não são executados. Se você usa o bash e deseja que o bash execute um script de inicialização, defina uma variável de ambiente "BASH_ENV = / caminho / para / meu / inicialização / script" em seu crontab antes da linha em que você define o trabalho.
fonte
mail
comando para ler mensagens da linha de comando. Ou olhe/var/spool/mail
. Mas se você instalou o postfix ou outro mailer que não o sendmail padrão, é necessária outra maneira de ler as mensagens.mail -s "cron output" [email protected]
funciona muito bem: /less $MAIL
se você deseja ver a saída do cron para o usuário atual ouless /var/spool/mail/root
se deseja ver a saída do cron para comandos em execução como root.As tarefas que o cron está executando são responsáveis por seu próprio log.
fonte
A maneira mais simples é capturar erros de impressão e salvar 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 '>' é o meu cronjob e depois de '>' é a captura e o salvamento em um arquivo localizado em uma pasta de log na raiz do meu projeto, mas pode estar no local desejado. Esteja alerta: sempre que o cronjob for chamado, ele substituirá o último log. Você pode usar '>>' para escrever no final de um arquivo existente ou procurar o 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 por access-log, se o cron retornar com 500 ou 400 deve estar errado.
Por fim, você também pode verificar / var / log / messages.
fonte
Eu acho que redirecionar dentro do arquivo cron pode não ser a melhor opção neste caso.
Freqüentemente, você deseja que a especificação de log seja co-localizada com o script de tarefa cron. Nesse caso, sugiro o seguinte:
Isso anexa a saída do trabalho cron ao arquivo capture-log.txt.
fonte
Prefiro receber relatórios por e-mail sobre trabalhos cron. Apenas coloque
MAILTO=seu email@domínio.com
no crontab e você receberá um email. Claro que você precisa ter o email configurado para sua conta.
fonte