Версия для печати

Не я один использую утилиту 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, то и в почту ничего не приходит. УРА! :)
Спим дальше...

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


Антиспам-картинка