Do not send messages with an empty body
Не я один использую утилиту mailx для пересылки сообщений от скриптов, работающих в cron'е. И часто хочется получать только сообщения об ошибках, а не нудный отчет, что всё хорошо.
Вернее даже так, «всё хорошо» получать совсем НЕ хочется. Это только притупляет внимание: каждый день приходит письмо что всё нормально, спим дальше. Через месяц ты уже не читая удаляешь эти письма, а там может быть уже «страшный пипец!».
Потому хочу, что бы хорошие письма не приходили (и без них нормально), а вот если случилась жопа, то тогда да — письмо, пожалуйте. И все сразу понятно: надо бежать и чинить.
Казалось бы в чем проблема, сделаем так:
40 4 * * * /usr/local/sbin/daily_script.sh 2>&1 >/dev/null | mailx -s "Alarm!" admin@admin.loc
Вот и нет! В случае, когда все хорошо и ошибок нет, mailx все равно пришлет письмо, но пустое. И так каждый раз. Что не приятно!
Вот ведь как удобно у FreeBSD было:
mail, Mail, mailx — send and receive mail
--E Do not send messages with an empty body. This is useful for piping errors from cron (8) scripts
А вот linux'овый mailx так не умеет. Потому, почесав голову, родил такое: mailxx
#!/bin/bash
#
# mailxx: mailx wrapper. Don't send empty mails.
# by kocmuk.ru, 2008
read stdin
if [ -n "$stdin" ] ; then
for p in "$@"
do
cmdline="$cmdline \"$p\""
done
echo "\"$stdin\"" | mailx $cmdline
fi
Теперь можно делать так:
40 4 * * * /usr/local/sbin/daily_script.sh 2>&1 >/dev/null | mailxx -s "Alarm!" admin@admin.loc
И если скрипт не вернул ничего в STDERR, то и в почту ничего не приходит. УРА! :)
Спим дальше...









Оставить комментарий