Есть ли дешевый способ контролировать файл журнала, например tail -f log.txt
, а затем, если появляется что-то вроде [error]
, выполните команду?
Спасибо.
Есть ли дешевый способ контролировать файл журнала, например tail -f log.txt
, а затем, если появляется что-то вроде [error]
, выполните команду?
Спасибо.
tail -fn0 logfile | \
while read line ; do
echo "$line" | grep "pattern"
if [ $? = 0 ]
then
... do something ...
fi
done
Я также обнаружил, что вы можете использовать awk для отслеживания шаблона и выполнения некоторых действий при обнаружении шаблона:
tail -fn0 logfile | awk '/pattern/ { print | "command" }'
Это приведет к выполнению команды, когда шаблон найден в журнале. Командой может быть любая команда unix, включая сценарии оболочки или что-то еще.
Еще более надежный подход - monit. Этот инструмент может отслеживать очень много вещей, но один из них заключается в том, что он легко будет задерживать один или несколько журналов, сопоставлять их с регулярным выражением, а затем запускать script. Это особенно полезно, если у вас есть коллекция файлов журналов для просмотра или более одного события для запуска.
Простое автоматизированное решение, которое охватывает множество сценариев:
ИСПОЛЬЗОВАНИЕ:
logrobot localhost [default-dir],fixer,[exit-codes],[command/script-to-run-per-exit-code] [feature] [logfile] [age] [str-1] [str-2] [WARN] [CRIT] [tag] [option]
Пример:
logrobot localhost /tmp/logXray,fixer,0y-1y-2y,0-uname,1-who,2-uptime autonda /var/log/kern.log 60m 'error' '.' 1 2 app_err_monitor -ndshow
С помощью этого инструмента вы можете отслеживать определенные шаблоны в файле журнала, а затем запускать команду или script, когда шаблоны найдены... или NOT Found!
Сценарии или команды могут быть настроены для запуска на основе пороговых значений и кодов выхода.
Инструмент можно загрузить непосредственно здесь.
Бэттер и просто:
tail -f log.txt | egrep -m 1 "error"
echo "Found error, do sth."
...