Вот еще один вариант, который я успешно использовал в течение многих лет - захватывать вывод и распечатывать его только при ошибке , вызывая электронную почту. Это не требует временных файлов и сохраняет весь вывод . Важной частью является то, 2>&1
что перенаправляет STDERR на STDOUT.
Отправьте весь вывод через конфигурацию cron mailer по умолчанию:
1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || echo "$OUTPUT"
То же самое, но с конкретным адресом и темой:
(адрес также можно изменить, установив MAILTO = xxxx для всего файла crontab)
1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || echo "$OUTPUT" | mail -s "Failed to backup" an@email.address
Вы даже можете выполнить несколько действий в случае ошибки и добавить в электронную почту:
1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || {echo "$OUTPUT" ; ls -ltr /backup/dir ; }
Это будет работать для простых команд. Если вы имеете дело со сложными конвейерами ( find / -type f | grep -v bla | tar something-or-other
), то вам лучше переместить команду в скрипт и запустить скрипт, используя вышеупомянутый подход. Причина в том, что если какая-либо часть канала будет выводиться в STDERR, вы все равно будете получать электронные письма.