Назад | Перейти на главную страницу

экран вызывает «хвост -F | grep »для вывода несогласованных строк

Это 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-\> и подтвердите.