Получить cronjob Email оповещение только об ошибках, а не о других stdout?

733
Ash

У меня есть задание cron, которое запускает файл script.sh (который создает резервную копию БД) и отправляет мне электронное письмо каждый час. В файле script.sh я делаю резервную копию нескольких баз данных (файл .sql), а затем создаю .zip из этого. Моя проблема в том, что я хочу получить электронное письмо, только если что-то пойдет не так. В настоящее время я получаю следующее письмо каждый час.

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

Есть идеи, как это решить? Я использую этот код в моем crontab: (- опция E, чтобы предотвратить пустое тело в фамильной почте mailx)

/60 * * * * /usr/local/sbin/mysqldata.sh 2>&1 | mail -s "Backup Failed" -E email@example.com 
4

1 ответ на вопрос

2
janos

Я думаю, что вам нужно сделать в два этапа:

  1. Сохраните вывод и ошибки в лог-файл
  2. Если сценарий завершился с ненулевым значением, отправьте файл журнала по электронной почте.

Например:

/60 * * * * /usr/local/sbin/mysqldata.sh >/path/to/log 2>&1; [ $? != 0 ] && mail -s "Backup Failed" -E email@example.com < /path/to/log 

Похожие вопросы