Отправка почты из командной строки, если тело не пустое
Я хотел бы написать простой скрипт, который предупреждает меня, если журнал изменяется. Для этого я использую grep, чтобы найти интересующие меня строки. Сейчас это работает так:
grep line /var/log/file | mail -s Log email@domain.tld
Проблема в том, что это отправляет письмо, даже если не найдено ни одной подходящей строки. У почтовой утилиты mailutils, похоже, нет переключателя, который приказывает ей отбрасывать письма с пустым телом.
Есть ли быстрый и простой способ сделать это?
3 ответа
output=$(grep line /var/log/file); [[ -n "$output" ]] && mail -s Log email@domain.tld
Или вы можете превратить это в работу cron, а затем, если она выдаст какой-либо вывод, отправит пользователям электронное письмо. Вы можете отредактировать файл /etc/aliases (а затем запустить команду newaliases), чтобы отправлять почту по адресу, не указанному в коробке.
Ex of cron entry (Вы не сможете установить строку темы, хотя
1 0 * * * grep line /var/log/file
Или вы можете получить утилиту ifne - это, вероятно, то, что вы хотите
grep line /var/log/file | ifne mail -s Log email@domain.tld
Команда ifne доступна в репозитории Epel для Centos и RHEL. Я не могу найти ссылку на справочную страницу в Интернете, но она есть
ifne (1)
ifne (1)NAME ifne - Запустить команду, если стандартный ввод не пуст
SYNOPSIS ifne [-n] команда
ОПИСАНИЕ ifne выполняет следующую команду тогда и только тогда, когда стандартный ввод не пуст.
ОПЦИИ -n Обратный ход. Запустите команду, если стандартный ввод пуст.
Note that if the standard input is not empty, it is passed through ifne in this case.
ПРИМЕР НАЙТИ. имя ядра | ifne mail -s "Основные файлы найдены" root
АВТОР Copyright 2008 Хавьер Мерино
Licensed under the GNU GPL 2008-05-01 ifne(1)
"man mail" говорит мне, что аргумент -E останавливает отправку почты, если тело пусто. прекрасно работает для меня
-E
Если исходящее сообщение не содержит текста в своей первой или единственной части сообщения, не отправляйте его, а отбрасывайте его молча, эффективно устанавливая переменную skipemptybody при запуске программы. Это полезно для отправки сообщений из скриптов, запускаемых cron(8).
См. /questions/219223/demon-rsync-eto-dejstvitelno-polezno/219231#219231
Просто используйте ifne:
grep line /var/log/file | ifne mail -s Log email@domain.tld