【发布时间】:2010-12-02 03:10:53
【问题描述】:
有没有便宜的方法来监控tail -f log.txt之类的日志文件,然后如果出现[error]之类的东西,执行命令?
谢谢。
【问题讨论】:
有没有便宜的方法来监控tail -f log.txt之类的日志文件,然后如果出现[error]之类的东西,执行命令?
谢谢。
【问题讨论】:
tail -fn0 logfile | \
while read line ; do
echo "$line" | grep "pattern"
if [ $? = 0 ]
then
... do something ...
fi
done
【讨论】:
tail -fn0 logfile 似乎已经过期,因为 HTTP 服务器日志文件很快被重命名并压缩了。我认为该脚本仍在监视旧文件描述符?有没有办法在tail命令一段时间后自动更新文件inode或其他东西?
grep -q设置返回码而不显示匹配行。
我还发现你可以使用 awk 来监控模式并在发现模式时执行一些操作:
tail -fn0 logfile | awk '/pattern/ { print | "command" }'
当在日志中找到模式时,这将执行命令。命令可以是任何 unix 命令,包括 shell 脚本或其他任何东西。
【讨论】:
更强大的方法是monit。这个工具可以监控很多事情,但其中之一是它可以轻松地跟踪一个或多个日志,匹配正则表达式,然后触发脚本。如果您要监视一组日志文件或要触发多个事件,这将特别有用。
【讨论】:
更好更简单:
tail -f log.txt | egrep -m 1 "error"
echo "Found error, do sth."
...
【讨论】: