#linux #bash #date #logging #centos
Вопрос:
У меня есть файл журнала «Apps.out» приложения для веб-блога, есть конкретное приложение, которое отправляет такие журналы в этот файл:
[YYYY/MM/DD HH:MM:SS][INFO][PATTERN -> Information1]
[YYYY/MM/DD HH:MM:SS][INFO][PATTERN -> Information2]
[YYYY/MM/DD HH:MM:SS][INFO][PATTERN -> Information3]
[YYYY/MM/DD HH:MM:SS][INFO][PATTERN -> Information4]
[YYYY/MM/DD HH:MM:SS][INFO][PATTERN -> Information5]
Я могу отфильтровать эту информацию с помощью: grep ‘PATTERN’ Apps.out
, но я хочу отправить эту информацию в новый файл (app1.log) и сделать это прогрессивно, просто чтобы отправить новый регистр в app1.log, соответствующий ШАБЛОНУ, возможно ли это сделать в режиме реального времени?
Спасибо
Ответ №1:
Вы можете сделать это с помощью tail -f
:
nohup bash -c "tail -f Apps.out | grep PATTERN > app1.log" amp;
Это будет следовать за файлом по мере его роста с того момента, как вы начнете возвращаться на 10 строк назад.
Вы можете изменить это -n
и вернуться на столько строк, сколько захотите, или прочитать с самого начала файла.
Комментарии:
1. Привет, один вопрос, для этого мне нужно, чтобы терминал был постоянно открыт, верно?
2. Вы можете использовать nohup, чтобы покинуть терминал или какую-либо услугу
3. поскольку вы ответили первым, отредактируйте свой ответ, добавив nohup, и я дам вам право голоса 🙂
4. достаточно справедливо :-). Выполнено
5. Привет, у меня ошибка с»>», я пробовал, но это не работает
Ответ №2:
вот что вы можете сделать : <your_log_file>
в качестве файла журнала и <your_PATTERN>
в соответствии с вашим ШАБЛОНОМ
nohup tail -f <your_log_file>.log|while IFS= read -r;do
case $REPLY in
(*<your_PATTERN>*)printf "%sn" "$REPLY">>app1.log;
esac
done amp;
Комментарии:
1. Привет, этот, похоже, работает, но я не знаю, почему, когда я закрываю консоль, она перестает работать через 2 м