Gnu-Screen

screen 導致“tail -F | grep”回顯不匹配的行

  • August 31, 2014

這是 Ubuntu (3.13.0-29-generic #53),試圖做一個簡單的 bash 腳本來監控匹配行的日誌文件。

如果我執行以下操作,則 bash shell 中除了匹配項之外沒有輸出,這是預期的:

尾-F server.log | grep –line-buffered “字” | tee -a wordwatch.log

但是,如果我嘗試在螢幕上做同樣的事情,會話就會被監視日誌文件中不匹配的數據發送到垃圾郵件中。顯然它顯示了監視日誌文件中的所有內容。此垃圾郵件不會出現在輸出日誌文件中。

screen -S “wordwatch” 尾 -F server.log | grep –line-buffered “字” | tee -a wordwatch.log

我做錯了什麼,如何阻止觀看的日誌向螢幕會話發送垃圾郵件?

當您以這種方式啟動管道時:

screen -S "wordwatch" tail -F server.log | grep --line-buffered "word" | tee -a wordwatch.log

then 僅tail -F server.log在內部啟動screen,其餘所有都連接到screen,而不是tail.

因此,您應該呼叫已經工作的 bash 腳本:

screen -S "wordwatch" myworkingscript.sh

另一種方法是顯式啟動 shell 並將所有行傳遞給它:

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-\>並確認。

引用自:https://serverfault.com/questions/625270