有没有一种廉价的方式来监视类似于 tail -f log.txt
的日志文件,然后如果出现类似于 [error]
的内容,执行一个命令?
谢谢。
tail -fn0 logfile | \
while read line ; do
echo "$line" | grep "pattern"
if [ $? = 0 ]
then
... do something ...
fi
done
我还发现可以使用awk监视模式,并在找到模式时执行某些操作:
tail -fn0 logfile | awk '/pattern/ { print | "command" }'
当在日志中找到模式时,将执行该命令。该命令可以是任何Unix命令,包括Shell脚本或其他任何内容。
一种更加强大的方法是使用Monit。这个工具可以监控很多东西,其中之一就是它可以轻松地跟踪一个或多个日志文件,匹配正则表达式,然后触发一个脚本。如果您有一组要监视的日志文件或多个事件要触发,这将非常有用。
tail -f log.txt | egrep -m 1 "error"
echo "Found error, do sth."
...
tail -fn0 logfile
似乎已经过期了,因为 HTTP 服务器日志文件很快就被重命名和压缩了。我认为脚本仍在监视旧的文件描述符?有没有办法在一段时间后自动更新文件 inode 或其他什么东西来更新tail
命令? - estgrep -q
命令来设置返回码而不显示匹配的行。 - Adam Liss