Я хотел бы написать простой скрипт, который предупреждает меня, если журнал изменяется. Для этого я использую grep, чтобы найти интересующие меня строки. Сейчас это работает так:
grep line /var/log/file | mail -s Log email@domain.tld
Проблема в том, что при этом отправляется письмо, даже если совпадающие строки не найдены. У почтовой утилиты из mailutils, похоже, нет переключателя, указывающего ей отбрасывать письма с пустым телом.
Есть ли быстрый и простой способ сделать это?
"man mail" сообщает мне, что аргумент -E останавливает отправку писем, если тело пусто. у меня отлично работает.
-E
Если исходящее сообщение не содержит текста в первой или единственной части сообщения, не отправляйте его, а отбрасывайте без уведомления, эффективно устанавливая переменную skipemptybody при запуске программы. Это полезно для отправки сообщений из скриптов, запускаемых cron (8).
output=$(grep line /var/log/file); [[ -n "$output" ]] && mail -s Log email@domain.tld
Или вы можете превратить это в задание cron, а затем, если оно произведет какие-либо результаты, оно отправит пользователям электронное письмо. Вы можете отредактировать файл / etc / aliases (а затем запустить команду newaliases), чтобы отправлять почту на адрес, не указанный в поле.
Например, запись в cron (Вы не сможете установить тему письма, хотя
1 0 * * * grep line /var/log/file
Или вы можете получить утилиту ifne - это, вероятно, то, что вы хотите
grep строка / var / log / file | ifne mail -s Журнал email@domain.tld
Команда ifne доступна из репозитория epel для centos и RHEL. Я не могу найти ссылку на страницу руководства в Интернете, но вот она
ифне (1)
ифне (1)ИМЯ ifne - Выполнить команду, если стандартный ввод не пуст
ОБЗОР ifne [-n] команда
ОПИСАНИЕ ifne выполняет следующую команду тогда и только тогда, когда стандартный ввод не пуст.
ОПЦИИ -n Обратная операция. Выполните команду, если стандартный ввод пуст.
Note that if the standard input is not empty, it is passed through ifne in this case.
ПРИМЕР найти. -name core | ifne mail -s "Основные файлы найдены" корень
АВТОР Авторские права 2008 г., Хавьер Мерино
Licensed under the GNU GPL 2008-05-01 ifne(1)
Видеть https://unix.stackexchange.com/a/100720/27458
Просто используйте ifne:
grep line /var/log/file | ifne mail -s Log email@domain.tld