Назад | Перейти на главную страницу

Скрипт для отправки электронной почты, если результат grep равен нулю

это было давно, и я, кажется, не могу вспомнить, как это сделать. Я пытаюсь найти файл журнала для слова или слов и отправить электронное письмо, если он не существует в течение последних пятнадцати минут (я буду устанавливать задание cron каждые пятнадцать минут, если нет лучшего способа сделать это), что у меня есть до сих пор является

if grep --quiet 'SEND OK' /logfile; then
  echo exists
else
  echo not found | mail -s "houston we have a problem" email@gmail.com
fi

Могу ли я использовать tail для проверки файла журнала за последние 15 минут? | tail -15 помогает?

и могу ли я дать ему "если" и написать мне, если он не найдет ключевое слово за последние 15 минут, поскольку он будет запускаться каждые пятнадцать минут

Буду очень признателен за любую помощь

Если в вашем журнале есть информация о дате и времени (я так думаю), вы можете превратить свой grep в другой grep для фильтрации даты и использовать -A {{big_number}}, чтобы получить все строки с 15 минут назад до настоящего времени.

Что-то похожее:

grep "$(date -d "15 minutes ago" +"{{your_log_date_format}}")" -A {{ big_number }} /logfile | grep --quiet 'SEND OK'

Это грязный способ (у вас могут возникнуть проблемы, если ваш {{big_number}} меньше, чем количество строк, записанных в журнале за последние 15 минут).

Кредиты идут: http://geek.co.il/2010/04/08/script-day-output-the-tail-of-a-log-based-on-time.

Если вы пытаетесь просмотреть файл за последние N минут (по крайней мере, содержимое файла, записанного с момента последнего запуска вашего скрипта), вам нужно что-то вроде logtail (http://linux.die.net/man/8/logtail). Возможно, это уже есть в вашем дистрибутиве. tail сам по себе не поможет, так как даст вам только последние N строк / символов независимо от того, когда они были написаны.