Экран заставляет "tail -F | grep" отображать несогласованные строки
Это Ubuntu (3.13.0-29-generiC#53), пытающийся создать простой скрипт bash для отслеживания файла журнала на соответствие строк.
Если я сделаю следующее, в оболочке bash не будет ничего, кроме совпадений, что ожидается:
tail -F server.log | grep - line-buffered "word" | tee -a wordwatch.log
Но если я попытаюсь сделать то же самое на экране, сеанс будет спам с несопоставленными данными из просматриваемого файла журнала. Видимо, он показывает все из просматриваемого файла журнала. Этот спам не отображается в выходном файле журнала.
экран -S "WordWatch" хвост -F server.log | grep - line-buffered "word" | tee -a wordwatch.log
Что я делаю не так и как я могу предотвратить просмотр спама в журнале спама на экране?
1 ответ
Когда вы запускаете трубу таким образом:
screen -S "wordwatch" tail -F server.log | grep --line-buffered "word" | tee -a wordwatch.log
только тогда tail -F server.log
запускается в течение screen
а все остальное связано с screen
, не tail
,
Поэтому вы должны вызвать ваш bash-скрипт, который уже работает:
screen -S "wordwatch" myworkingscript.sh
Другой подход заключается в явном запуске оболочки и передаче ей всей строки:
screen -S "wordwatch" bash -c 'tail -F server.log | grep --line-buffered "word" | tee -a wordwatch.log'
Также другой хороший способ просмотра логов с экрана - это специальный конфиг:
#### logger.screenrc
sessionname logger
hardstatus alwaysignore
split
split
screen -t "Log One" 1 sh -c 'tail -F /a/b/c | egrep "xxxx" | tee -a '
focus
screen -t "Log Two" 2 /home/somescript.sh
focus
screen -t "Messages" 3 /home/otherscript.sh
focus
####
screen
должен быть вызван так:
# screen -c /home/logger.screenrc
Для выхода просто нажмите <CTRL-A><CTRL-\>
и подтвердите.