У меня есть несколько запущенных заданий cron (в /etc/cron.daily
, /etc/cron.hourly
, /etc/cron.weekly
и т.д.) И по электронной почте root@localhost
с результатами. Я хотел бы остановить эти электронные письма, если задания выполняются успешно, и только электронная почта при ошибке (что, как я понимаю, можно сделать, перенаправив стандартный stdout
в /dev/null
). Я понимаю, как это сделать для отдельных заданий cron, но сценарии в этих специальных каталогах запускаются с использованием run-parts
. Каков наилучший способ подавления успешных писем для этих сценариев?
3 ответа
Возможно, вы захотите использовать одну из оболочек для программ, которые выводят все, когда что-то идет не так, и проглатывают стандартный вывод.
Одним из примеров может быть cronic, просто добавьте «cronic» к «run-parts», например:
# m h dom mon dow user command
17 * * * * root cd / && /etc/cronic run-parts --report /etc/cron.hourly
где /etc/cronic
- это место с исполняемым скриптом cronic, загруженным с упомянутого веб-сайта.
Вы должны отправить успешные уведомления по электронной почте в /dev/null
чтобы они исчезли.
Но вы хотите видеть неудачные уведомления по электронной почте.
Это означает, что вам нужно сначала направить стандартный stdout
в /dev/null
а затем направить /dev/stderr
в стандартный stdout
попробуйте изменить часть перенаправления ваших cronjobs на
>/dev/null 2>&1
Смотрите эту ссылку
- Если скрипт ведет себя хорошо, он будет писать только в
STDOUT
если он успешен, и вSTDERR
в случае ошибки. - По умолчанию cron отправляет по почте все, что пишет скрипт в
STDOUT
илиSTDERR
(Arch wiki).
Итак, если вы хотите сохранить уведомления об ошибках, не перенаправляйте STDERR
, просто STDOUT
:
COMMAND > /dev/null
Если вы выполняете типичные >/dev/null 2>&1
, вы фактически подавляете оба (документация bash).
- Сделайте дескриптор файла
stdin
копией /dev /null. - Сделайте дескриптор файла
stderr
копиейstdout
(которая уже указала на /dev /null).