Как получить непрерывный поток, с подкачкой
Я отправил это в Superuser, но не получил ни одного получателя: https://superuser.com/questions/832578/how-to-grep-a-continuous-stream-with-paging
Я хочу взять файл журнала и отфильтровать некоторые нерелевантные записи журнала, например, на уровне INFO. Приведенный выше ответ на Stack Overflow дал мне часть пути:
$ tail -f php_error_log | grep -v INFO
Следующая часть, которую я хочу, это иметь подкачку в этом потоке, например, с поменьше. less +F работает с непрерывными потоками, но я не могу применить это к grep. Как я могу сделать это?
После публикации этого вопроса я работал над ним и обнаружил, что less
ожидает появления EOF и зависает до тех пор, пока не получит его ( источник). Это объясняет, почему попытка следовать по трубе не работает. Я взломал короткий сценарий, чтобы сделать то, что я хочу, неуверенно:
#!/bin/bash
tail -f /data/tmp/test.txt | grep --line-buffered foo > /data/tmp/foo &
pid=$!
echo $pid
sleep 1
less +F /data/tmp/foo
kill $pid
rm /data/tmp/foo
Я убежден, что это можно сделать более элегантно, возможно, с помощью временного файла, который автоматически очищается без прямого взаимодействия.
1 ответ
Как насчет этого:
grep -V INFO php_error_log | less +F
Или вы можете запустить multitail php_error_log
, затем, как только начинается многоходовая сеть, нажмите e
и следуйте инструкциям, чтобы добавить регулярное выражение для фильтрации. Для непрерывного мониторинга одного или нескольких файлов журнала с течением времени, многокомпонентное решение является хорошим решением.