Unix / CentOS, как разобрать access_log и записать любые совпадения в файл - PullRequest
1 голос
/ 01 декабря 2011

У меня работает в фоновом режиме (SSH) tail -f access_log | grep 'POST /index.php' > test &

Я выполнил эту команду внутри /var/log/httpd, где хранятся access_log и error_log.

Я продолжаю делать ls -l чтобы увидеть, изменился ли test файл размера, но он создан .. и всегда 0 байтов.

Я даже использую правильную команду tail?делать то, что я хочу?

Я хочу иметь возможность отфильтровывать бесполезную информацию access_log, хранить только файлы POST /index.php в другом файле.

Я знаю, что access_log постоянно изменяет себя, хотяЯ повторяю это, но если бы можно было начать сверху вниз (head? Я думаю), это было бы лучше.

Ответы [ 3 ]

1 голос
/ 01 декабря 2011

tail -f будет иметь непрерывный вывод, поэтому > test может никогда не создать файл.

Предположение в ответе Ахмеда Масуда, вероятно, превосходит это, поэтому попробуйте сначала, но если это не сработает, вы можете просто запустить это раз в минуту или раз в час, или что угодно, если вы невам не нужно беспокоиться о том, чтобы быть сверхэффективным:

grep 'POST /index.php' access_log > test

Это будет полностью заново создавать файл test каждый раз, когда вы его запускаете, а не создавать его постепенно.Но если вы просто хотите получить грубый инструмент, это будет сделано.

Если вы сделаете это таким образом, и ваш файл журнала будет повернут, у вас больше не будет того, что было в предыдущем файле журнала в test после того, как он будет запущен для нового файла.Так что знайте об этом!С другой стороны, используя tail -f, если файл вращается, вы прекратите получать данные, пока не перезапустите процесс (и он также уничтожит ваши старые данные, если только вы не используете >> вместо >).

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

Другая идея: "tail -F -n +1" будет отслеживать ротацию файла журнала и читать с начала файла.Кроме того, вы уверены, что в вашем журнале есть строки POST?Просто спрашиваю ... Наконец, уместны ли права доступа к файлу?

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

Попробуйте сделать это в сценарии оболочки,

tail -f access_log | while read r ; do 
      echo $r | grep 'POST[[:space:]]*/index.php' >> out
done

, это должно избавить от этой надоедливой проблемы с очисткой.

...