如果关键字触发然后执行命令,Shellscript监视日志文件?

est*_*est 35 linux shell logfiles

是否有一种廉价的方式来监视日志文件tail -f log.txt,如果[error]出现类似的东西,执行一个命令?

谢谢.

Wes*_*ice 52

tail -fn0 logfile | \
while read line ; do
        echo "$line" | grep "pattern"
        if [ $? = 0 ]
        then
                ... do something ...
        fi
done
Run Code Online (Sandbox Code Playgroud)

  • 只需在tail命令中添加--retry,或使用-F代替-f.应该这样做. (11认同)
  • 哦,还有一件事,`tail -fn0 logfile`似乎已过期,因为HTTP服务器日志文件被快速重命名和gzip'ed.我认为脚本仍然监视旧的文件描述符?有没有办法在`tail`命令一段时间后自动更新文件inode或其他东西? (2认同)
  • 也可以考虑使用“ grep -q”设置返回代码而不显示匹配的行。 (2认同)

小智 13

我还发现你可以使用awk监视模式并在找到模式时执行一些操作:

tail -fn0 logfile | awk '/pattern/ { print | "command" }'
Run Code Online (Sandbox Code Playgroud)

这将在日志中找到模式时执行命令.命令可以是任何unix命令,包括shell脚本或其他任何内容.


Ari*_*tis 5

monit是一种更强大的方法。该工具可以监视很多东西,但其中之一是它将轻松跟踪一个或多个日志,与正则表达式匹配,然后触发脚本。如果您要监视一组日志文件或要触发多个事件,则此功能特别有用。