我正在寻找一种在linux上观看多个日志文件并查找内部单词或短语的方法,如果找到,则触发脚本或动作,这需要保持不变。
我知道这可以通过一些grep,tail hack来完成,但我想知道是否有预先为此配置选项,例如,我认为logtail可以监视文件但不能触发操作。
有什么想法吗?
答案 0 :(得分:1)
您可以将grep的输出设置为变量,然后评估其是否为空以运行脚本/操作。
示例:
使用$(无论命令)将命令输出转换为字符串line=$( grep -m 1 YourKeyWord <( exec tail -f /directory/of/log.out ); kill $! 2> /dev/null)
然后,您可以开始评估每个日志,并确定以下操作。
if [ "$line"!="" ]
then
echo "Found $line"
service something start
line=""
echo "Now we can look for ABC"
fi
line=$( grep -m 1 ABC <( exec tail -f /your/otherdir/of/log.out ); kill $! 2> /dev/null)
if [ "$linea!="" ]
then
echo "Found the other $linea"
ntpstat (or whatever command you need)
line=""
echo "And we can keep doing this"
fi
您可以使用两个函数(一个用于重置$ line,另一个用于执行grep,使用$ Dir var)来执行此操作,但为了详细解答,让我们离开。
这一行,
grep -m 1 WhateverWord&lt;(exec tail -f /your/otherdir/of/log.out);杀了$! 2 - ; 的/ dev / null的
取自https://superuser.com/questions/275827/how-to-read-one-line-from-tail-f-through-a-pipeline-and-then-terminate,并附有以下说明,它可以避免服务器中的逻辑问题。
“kill会杀死剩余的tail -f进程,我们会隐藏错误,因为 杀戮的时候尾巴可能会消失 调用“。
答案 1 :(得分:0)
答案是SEC(yum install sec)。它的作用是监视任何日志文件并使用规则使用正则表达式扫描文件,然后您可以运行shell脚本,插入日志和其他一些东西。
它作为一项服务运行,所以机器重新启动,crons等没有问题
希望这有助于任何人尝试做我想做的事。