Наконец-то я установил реалистичное расписание резервного копирования своих данных с помощью сценария оболочки, который обрабатывается cron через короткие промежутки времени. К сожалению, я продолжаю получать пустые электронные письма каждый раз, когда выполняется CRON, а не только когда что-то идет не так.
Можно ли заставить CRON отправлять электронные письма только тогда, когда что-то идет не так, т.е. мой TAR
не выполняется как задумано?
Вот как мой crontab настроен на данный момент;
0 */2 * * * /bin/backup.sh 2>&1 | mail -s "Backup status" email@example.com
Большое спасибо!
/bin/backup.sh > log_file || (echo Backup failed with exit status $?; cat log_file)
?Использование скрипта- оболочки cronic выглядит хорошей идеей; чтобы использовать его, вам не нужно менять свои сценарии.
Вместо того:
делать:
Проще говоря; он будет работать беззвучно, если все идет гладко (состояние выхода 0), но если нет, он будет детально сообщать, а cron будет обрабатывать почтовые отчеты.
Больше информации на https://habilis.net/cronic/ .
источник
chronic
изmoreutils
пакета: joeyh.name/code/moreutilsВы специально указываете на то,
cron
чтобы всегда отправлять электронную почту, даже когда/bin/backup.sh
(кстати, она должна быть/usr/local/bin
) это удается. Просто пропустите| mail -s "Backup status" email@example.com
часть, и электронная почта будет отправлена только тогда, когда есть выход. Вероятно, вы можете (в зависимости от вашегоcron
) явно указать адрес электронной почты для mail как назначение в файле crontab.Подробнее см.
источник
Вы должны направлять
stderr
anmd не такstdout
иstderr
.Используйте
1> /dev/null
не ,2>&1
и это должно быть хорошо. Также вам может потребоваться правильно сообщить об ошибке в вашем скрипте резервного копирования.источник
Вот еще один вариант, который я успешно использовал в течение многих лет - захватывать вывод и распечатывать его только при ошибке , вызывая электронную почту. Это не требует временных файлов и сохраняет весь вывод . Важной частью является то,
2>&1
что перенаправляет STDERR на STDOUT.Отправьте весь вывод через конфигурацию cron mailer по умолчанию:
То же самое, но с конкретным адресом и темой:
(адрес также можно изменить, установив MAILTO = xxxx для всего файла crontab)
Вы даже можете выполнить несколько действий в случае ошибки и добавить в электронную почту:
Это будет работать для простых команд. Если вы имеете дело со сложными конвейерами (
find / -type f | grep -v bla | tar something-or-other
), то вам лучше переместить команду в скрипт и запустить скрипт, используя вышеупомянутый подход. Причина в том, что если какая-либо часть канала будет выводиться в STDERR, вы все равно будете получать электронные письма.источник