Хвост файла журнала в Linux и запуск скрипта, если слова совпадают

Я ищу способ просматривать несколько файлов журналов в Linux и искать слова или фразы внутри, а если они найдены, запускать сценарий или действие, это должно быть постоянным.

Я знаю, что это можно сделать с помощью некоторого взлома grep, tail, но я хочу знать, есть ли что-то предварительно сделанное для этого с параметрами конфигурации, например, я думаю, что logtail может отслеживать файлы, но не может запускать действия.

Любые идеи?


person Anton Krall    schedule 07.11.2015    source источник
comment
stackoverflow.com/questions/4331309/, но вместо "f" попробуйте использовать "F" для обработки ротации журнала   -  person jaroslawj    schedule 07.11.2015
comment
Я ищу что-то, что может работать непрерывно и автоматически запускаться с сервером (на основе cron или init.d)   -  person Anton Krall    schedule 07.11.2015


Ответы (2)


Вы можете установить вывод grep в переменную, а затем оценить, пуста ли она для запуска вашего сценария/действий.

Пример:

Convert command output to string with $( whatever command )
line=$(  grep -m 1 YourKeyWord <( exec tail -f /directory/of/log.out ); kill $! 2> /dev/null)
Then you can start evaluating each log, and determine the following actions.
if [ "$line"!="" ]
then
echo "Found $line"
service something start
line=""
echo "Now we can look for ABC"
fi

line=$(  grep -m 1 ABC <( exec tail -f /your/otherdir/of/log.out ); kill $! 2> /dev/null)
if [ "$linea!="" ]
then
echo "Found the other $linea"
ntpstat (or whatever command you need)
line=""
echo "And we can keep doing this"
fi

Вы можете сделать это с помощью двух функций (одна для сброса $line, а другая для выполнения grep с использованием переменной $Dir), но ради подробного ответа давайте оставим этот путь.

Линия,

grep -m 1 WhateverWord ‹( exec tail -f /your/otherdir/of/log.out ); убить $! 2> /dev/ноль

был взят из ответа https://superuser.com/questions/275827/how-to-read-one-line-from-tail-f-through-a-pipeline-and-then-terminate со следующим объяснением, и это позволяет избежать логических проблем на вашем сервере.

«kill уничтожит оставшийся процесс tail -f, и мы скроем ошибки, потому что возможно, что хвост исчезнет к тому времени, когда будет вызван kill».

person nDCasT    schedule 11.11.2015
comment
Спасибо за ваше предложение, я добавил его в свою библиотеку кода, но тем временем я хочу, чтобы все знали, что я нашел то, что делает именно то, что мне нужно. Он называется SEC (в CentOS вы можете просто запустить yum install sec). - person Anton Krall; 12.11.2015
comment
Еще немного обсуждения здесь: superuser.com/questions/270529/ - person John Rix; 12.11.2015
comment
Отлично, попробую SEC. Мой ответ работает очень хорошо в средах, где вы не можете или не можете ничего устанавливать. - person nDCasT; 16.11.2015

Ответ SEC (yum install sec). Что он делает, так это отслеживает любой файл журнала и использует правила для сканирования файлов с использованием регулярных выражений, а затем вы можете запускать сценарии оболочки, вставлять журналы и некоторые другие вещи.

Он работает как служба, поэтому проблем с перезагрузка машины, crons и т.д.

Надеюсь, это поможет любому, кто попытается сделать то, что я хотел.

person Anton Krall    schedule 12.11.2015