Как выполнять запрос MySQL каждый раз, когда tail -f показывает новую строку из файла журнала в Linux - PullRequest
1 голос
/ 01 декабря 2010

Я пытаюсь отследить файл журнала с помощью tail -f, проанализировать его для извлечения некоторых данных с помощью grep и передать данные как запрос mysql.Я мог бы сделать это, передав каждую новую строку, обнаруженную tailf, в скрипт php, но я не знаю, как это сделать. Или я мог бы напрямую смоделировать tailf с php, но как я могу отслеживать файл на предмет изменений с помощью php?Я думаю, просто потратив немного времени, найдите размер, запомните последнюю позицию, найдите ее и прочитайте до разницы, верно?Кто-нибудь может дать несколько советов о том, что лучше использовать?или проще?Также я слышал, что именованные каналы могут быть решением, но я не знаю, как получить данные оттуда. Кстати, логгер - это nginx .. спасибо

Ответы [ 2 ]

3 голосов
/ 01 декабря 2010

В оболочке вы можете сделать что-то вроде:

tail -f file.log|grep whatever-you-want|while read line; do 
  echo $line
done

Просто измените строку echo $line на то, что вы хотите - вы можете называть PHP или что угодно в этой строке, $line - этолиния от комбинации хвост / grep.

Посмотрите на эти SOq для получения дополнительной информации:

0 голосов
/ 01 декабря 2010

вы смешиваетесь с разными подходами. tail -f означает, что у вас будет запущен процесс все время, и если файл журнала будет усечен (повернут), вы, скорее всего, застрянете. Если вам нужна хорошая вещь для мониторинга журналов (я полагаю, Linux), то вам нужно отслеживать файл на наличие изменений и искать в запомненной позиции. ИМХО лучший способ - полагаться на существующее решение. syslog-ng, кажется, приходит на ум. Он может направить ваши файлы журнала в вашу программу. Хотя не в случае с несложными журналами. Я бы выбрал http://www.php.net/manual/en/intro.inotify.php. Это потребует работающего процесса. В качестве окончательного решения (порядок зависит от вашей ситуации) я бы пошел на периодическую проверку с помощью cron.

...