这是 Ubuntu(3.13.0-29-generic #53),尝试执行一个简单的 bash 脚本来监视日志文件中匹配的行。
如果我执行以下操作,则 bash shell 中除了匹配之外没有任何输出,这是预期的:
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
另一种方法是明确启动 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-\>
并确认。