【发布时间】:2014-01-22 06:33:06
【问题描述】:
我目前正在考虑使用 bash 脚本(抱歉,不能使用 perl 等其他语言)来跟踪服务器启动期间的运行日志。基本上,我必须根据在写入日志时是否遇到某些字符串或模式来触发某些事件。目前,我有这个代码:
LOG=path_to_logfile
LINE1="[1-9][0-9]* some string"
LINE2="another string"
LINE3="third string"
tail -fn0 $LOG | \
while read line
do
echo $line | grep "$LINE1" || echo $line | grep "$LINE2" || echo $line | grep "$LINE3"
if [ $? = 0 ]
then
TMP=<echo line above>
... bunch of conditional statements...
fi
done
但是,这有点慢;当 echo/grep 组合使用 or 检测到我需要跟踪的线路时,它是在服务器已经启动之后的 waaaay。什么是上述的好选择?我读过应该使用 awk,但是当我尝试用 awk 编写它时,要么我写错了,要么处理过程也花费了太多时间才能完成。
任何帮助将不胜感激。谢谢!
【问题讨论】:
-
你在跟踪什么?哪个服务器日志?
-
我正在启动一个 jboss 服务器,假设它有 /path/to/server.log 作为日志文件。抱歉,我在手机中输入此代码时刚刚编辑了代码,因此格式被破坏了。
-
不幸的是,只要 tail -f 的输出通过管道,流就会被缓冲,管道之后的所有内容都不再反映正在写入的日志的实时时间。
标签: linux bash logging grep echo