在Linux上设置日志文件并在匹配单词时触发脚本

时间:2015-11-07 06:43:00

标签: linux logging monitor logfiles

我正在寻找一种在linux上观看多个日志文件并查找内部单词或短语的方法,如果找到,则触发脚本或动作,这需要保持不变。

我知道这可以通过一些grep,tail hack来完成,但我想知道是否有预先为此配置选项,例如,我认为logtail可以监视文件但不能触发操作。

有什么想法吗?

2 个答案:

答案 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等没有问题
希望这有助于任何人尝试做我想做的事。