У меня есть несколько запущенных заданий 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).
