Только электронная почта об ошибках cron для рабочих мест в cron.daily, cron.hourly и т. Д.
6090
jrdioko
У меня есть несколько рабочих мест хрон, которые работают (в /etc/cron.daily, /etc/cron.hourly, /etc/cron.weeklyи т.д.) и электронную почту root@localhostс результатами. Я хотел бы остановить эти электронные письма, если задания выполняются успешно, и только электронную почту при ошибке (что, как я понимаю, можно сделать, перенаправив stdoutна /dev/null). Я понимаю, как это сделать для отдельных заданий cron, но сценарии в этих специальных каталогах запускаются с использованием run-parts. Каков наилучший способ подавления успешных писем для этих сценариев?
3 ответа на вопрос
5
pavium
Вы должны отправить успешные уведомления по электронной почте, /dev/nullчтобы они исчезли.
Но вы хотите видеть неудачные уведомления по электронной почте.
Это означает, что необходимо сначала направить stdoutна, /dev/nullа затем направить /dev/stderrвstdout
попробуйте изменить часть перенаправления ваших cronjobs на
Разве это не подавляло бы электронные письма об ошибках (потому что они не производили бы никакого вывода)? Кроме того, мне нужно сделать это для моих каталогов `cron.XXX`, которые используют` run-parts`, так что это не так просто, как перенаправление для отдельных скриптов.
jrdioko 13 лет назад
0
Нет, идея в том, что `stderr` выбрасывается *, а затем *` stderr` перенаправляется на `stdout`. Я не уверен, что такое `run-parts`, но как бы то ни было, он работает с перенаправлением` stdout`, и тогда `stderr` кажется подходящим.
pavium 13 лет назад
0
Ага, я погуглил "run-parts". Это усложняет проблему, не так ли? Возможно, вам следует избегать `run-parts` и вызывать каждый скрипт отдельно.
pavium 13 лет назад
0
Ах, хорошо, я понимаю. `run-parts` запускает все сценарии в таких каталогах, как` / etc / cron.daily`, поэтому трюк заключается в перенаправлении на отдельные сценарии, которые он выполняет.
jrdioko 13 лет назад
0
Я думаю так. Я не смог найти ничего о перенаправлении * всего * вывода из `run-parts` (даже на странице man, которую я только что обнаружил, у меня есть).
pavium 13 лет назад
0
Вы уверены насчет бита `> / dev / null 2> & 1`? Я проверил это, и он направляет все в `/ dev / null`, где, если вы уроните` 2> & 1`, будет удален только стандартный вывод.
jrdioko 13 лет назад
2
5
Cyryl Płotnicki
Возможно, вы захотите использовать одну из оболочек для программ, которые выводят все, когда что-то идет не так, и проглатывают стандартный вывод.
Одним из примеров может быть 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, скачанное с упомянутого сайта.
1
morallo
If the script is well behaved, it will write only to STDOUT if successful, and to STDERR in case there is an error.
By default, cron will mail everything that the script writes into STDOUTorSTDERR (Arch wiki).
So, if you want to keep error notifications, don't redirect STDERR, just STDOUT:
COMMAND > /dev/null
If you do the typical >/dev/null 2>&1, you are effectively suppressing both (bash documentation).
Make stdin file descriptor a copy of /dev/null.
Make stderr file descriptor a copy of stdout (that already pointed to /dev/null).
Даже если это не полностью отвечает на первоначальный вопрос, оно устраняет некоторые ошибки в [ответе pavium] (https://superuser.com/a/290058/491366).
morallo 9 лет назад
0