Obter o alerta de e-mail do cronjob apenas em erros, não para outros stdout?

4

Eu tenho um cron job que executa um arquivo script.sh (que faz o backup do banco de dados) e envia um e-mail a cada hora. No arquivo script.sh, estou fazendo backup de alguns bancos de dados (arquivo .sql) e, em seguida, criando .zip dele. Meu problema é, eu quero receber um e-mail apenas se algo der errado. Atualmente estou recebendo o seguinte e-mail a cada hora.

adding: db2017_173601.sql (deflated 89%)
adding: bvDatabase_173601.sql (deflated 94%)
adding: cmc_173601.sql (deflated 60%)

Alguma ideia de como resolver isso? Eu estou usando este código no meu crontab: (- E opção para evitar o corpo vazio no mailx heirloom)

/60 * * * *  /usr/local/sbin/mysqldata.sh 2>&1 | mail -s "Backup Failed" -E [email protected]
    
por Ash 05.06.2017 / 17:08

1 resposta

2

Eu acho que você precisa fazer em duas etapas:

  1. Salve a saída e os erros em um arquivo de log
  2. Se o script sair com diferente de zero, envie o arquivo de log por email

Por exemplo:

/60 * * * *  /usr/local/sbin/mysqldata.sh >/path/to/log 2>&1; [ $? != 0 ] && mail -s "Backup Failed" -E [email protected] < /path/to/log
    
por 05.06.2017 / 17:26