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

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

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

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

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

1 ответ

Решение

Попробуйте 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 проще. Это может вызвать проблемы с производительностью, если файл становится большим и постоянно меняется.

Другие вопросы по тегам