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

Просмотр файла и отправка электронного письма при его изменении

У меня есть файл журнала, в котором иногда появляются критические ошибки. Каждый раз, когда возникает критическая ошибка, я хочу получать электронное письмо с уведомлением об изменении. Есть ли инструмент / набор инструментов unix, который я могу адаптировать для этой цели?

Я думал о том, чтобы сделать

tail -f logfile | grep CRITICAL > critical.errors
watch tail critical.errors   # And somehow, email on changes. 

Однако команда watch не выполняет никаких действий. Итак ... есть ли что-то вроде «часов». Или, возможно, хороший существующий сценарий, который сделает это? Я могу создать решение bash / python самостоятельно, но я бы предпочел повторно использовать существующие инструменты для более чистой обработки ошибок и т. Д.

Попробуйте IWatch - это сценарий Perl, основанный на inotify, который делает именно то, что вам нужно:

http://sourceforge.net/projects/iwatch/

Вы также можете свернуть свой собственный инструменты inotify, в частности inotifywait. Изменение примера №2 с этой страницы (непроверенного):

#!/bin/sh
file=logfile
cp $file $file.last
while true; do
  EVENT=$(inotifywait --format '%e' $file)
  [ $? != 0 ] && exit
  [ "$EVENT" = "MODIFY" ] && ( diff $file $file.last | mail ... ) && cp $file $file.last
done

Вы также можете сохранить счетчик байтов / строк и отправлять по почте только новые байты / строки, но использовать diff проще. Однако это может вызвать проблемы с производительностью, если файл становится большим и постоянно изменяется.