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