Это Ubuntu (3.13.0-29-generic # 53), пытающаяся выполнить простой сценарий bash для отслеживания файла журнала на предмет соответствия строк.
Если я сделаю следующее, в оболочке bash не будет никаких результатов, кроме ожидаемых совпадений:
хвост -F server.log | grep - "слово" с строчной буферизацией | тройник -a wordwatch.log
Но если я попытаюсь сделать то же самое на экране, сеанс будет забит несогласованными данными из наблюдаемого файла журнала. Очевидно, он показывает все из наблюдаемого файла журнала. Этот спам не отображается в выходном файле журнала.
экран -S "wordwatch" хвост -F server.log | grep - "слово" с строчной буферизацией | тройник -a wordwatch.log
Что я делаю не так и как предотвратить спам сеанса экрана в журнале просмотра?
Когда вы запускаете трубу таким образом:
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-\>
и подтвердите.