Gnu-Screen
screen 導致“tail -F | grep”回顯不匹配的行
這是 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-\>
並確認。