Отправка почты из командной строки, если тело не пустое

Я хотел бы написать простой скрипт, который предупреждает меня, если журнал изменяется. Для этого я использую 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
Другие вопросы по тегам