Como fazer o cron enviar e-mail com log de erros quando o script gera erros?

2

Eu tenho um cron job que executa um script que escreve verifica erros em um banco de dados sql e grava os erros em um arquivo de log. O arquivo de log é fornecido no comando para executar o script. Eu só quero receber um email quando o script encontrar erros, e eu quero que o log seja incluído no email. Não quero receber um email se o script não encontrar erros. Aparentemente, o script grava no log quando o script encontra ou não encontra erros (eu não escrevi este script).

    20 6-10 * * 1-5 ~/job_failure_test.sh -o ~/job_fail.log 2>&1 /dev/null | mail -s "Errors" [email protected] < ~/job_fail.log

Até agora, esta linha me envia e-mails quando há erros gravados no log, mas não me envia o log atualizado. Ele me envia o log da execução anterior do cron job.

    
por linuxuser 06.10.2016 / 03:48

2 respostas

4

Apenas mude | (um tubo ) para || (um ou ) (supondo que o script use códigos de saída corretamente), embora altere o script para gerar apenas erros e fazer isso é uma prática melhor:

[email protected]
[email protected]
20 6-10 * * 1-5 ~/job_failure_test.sh

O jeito feio;

20 6-10 * * 1-5 ~/job_failure_test.sh > ~/job_fail.log 2>&1 || mail -s "Errors" [email protected] < ~/job_fail.log
    
por 06.10.2016 / 04:17
3

Este recurso está embutido no cron! Se o comando produzir alguma saída, ou se retornar um status diferente de zero, o cron enviará um e-mail para você.

Muitas distribuições modernas não configuram o email local. Se o seu não, instale um agente de transferência de email (MTA). Veja por exemplo este tópico para o Ubuntu, ou MTA mínima que entrega correio localmente (para o cron)? se você quer algo minimalista. Ou apenas instale um MTA comum, como o Exim ou o Postfix, e configure-o apenas para entrega local (por exemplo, este encadeamento ) para o Debian. Depois que o e-mail local estiver configurado, você poderá ler seu e-mail local com seu cliente de e-mail favorito.

Em vez de ler seu e-mail localmente, você pode criar um arquivo ~/.forward contendo um endereço de e-mail externo e todos os seus e-mails locais serão encaminhados para lá. Se você escolher o encaminhamento, deverá ter um MTA capaz de enviar e-mails externamente (" smarthost ").

Como alternativa, defina a variável MAIL no crontab para que ela envie o e-mail diretamente para esse endereço. Isso também exige que seu sistema possa enviar e-mails externamente.

    
por 10.10.2016 / 02:19