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