2015-11-07 1 views
0

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

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

Любые идеи?

+0

http://stackoverflow.com/questions/4331309/shellscript-to-monitor-a-log-file-if-keyword-triggers-then-execute-a-command но вместо 'F' попробовать используя «F» для обработки логарифма вращения – jaroslawj

+0

Я ищу что-то, что может работать непрерывно и может автоматически запускаться с сервера (основанный на cron или init.d) –

ответ

0

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

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

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

1

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

Пример:

Преобразовать вывод команды в строку с $ (независимо от команды)
line=$( grep -m 1 YourKeyWord <(exec tail -f /directory/of/log.out); kill $! 2> /dev/null) 
Затем можно приступать к оценке каждого журнала, и определить следующие действия.
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 

Вы можете сделать это с помощью двух функций (один для сброса $ линии, а другой делать 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 со следующим объяснением, и это избежать логических проблем на сервере.

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

+0

Спасибо за ваше предложение, я добавил его в свою кодовую библиотеку но тем временем я хочу, чтобы все знали, что я нашел то, что делает именно то, что мне нужно. Это называется SEC (на CentOS вы можете просто запустить yum install sec). –

+0

Еще несколько обсуждений здесь: http://superuser.com/questions/270529/monitoring-a-file-until-a-string-is-found –

+0

Отлично, и я дам SEC попробовать. Мой ответ работает очень хорошо в средах, где вы не можете или не можете ничего устанавливать. – nDCasT

Смежные вопросы