Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Shellscript在关键字触发时监视日志文件,然后运行snmptrap命令_Linux_Bash_Shell_Rhel_Snmp Trap - Fatal编程技术网

Linux Shellscript在关键字触发时监视日志文件,然后运行snmptrap命令

Linux Shellscript在关键字触发时监视日志文件,然后运行snmptrap命令,linux,bash,shell,rhel,snmp-trap,Linux,Bash,Shell,Rhel,Snmp Trap,有没有一种方法可以像使用shell脚本那样监视日志文件 tail-f/var/log/errorlog.txt然后如果出现类似down的关键字,则生成SNMPTRAP到snmp管理器,并继续监视 我有一个SNMP脚本可用于生成SNMPTrap,它看起来像 snmptrap -v v2c -c community host "Error message" 让脚本名为snmp.sh 我的问题是如何执行以下操作 跟踪日志 如果关键字[down]匹配,则使用snmp.sh脚本发送警报 否则离开 根据建

有没有一种方法可以像使用
shell脚本那样监视日志文件
tail-f/var/log/errorlog.txt
然后如果出现类似
down
的关键字,则生成
SNMPTRAP
snmp管理器
,并继续监视

我有一个
SNMP
脚本可用于生成
SNMPTrap
,它看起来像

snmptrap -v v2c -c community host "Error message"
让脚本名为
snmp.sh

我的问题是如何执行以下操作

  • 跟踪日志
  • 如果关键字[down]匹配,则使用snmp.sh脚本发送警报
  • 否则离开
  • 根据建议,我试过这个

    tail -F  /data/log/test.log |
    
    egrep -io 'got signal 15 | now exiting' | 
    
    while read -r line ;
    do
    
        case "$line" in
           "got signal 15")
            echo "hi"
                ;;
            "now exiting")
            echo "hi2"
                 ;;
            *)
    
    
        esac
    done
    
    但问题是tail在这里不适用于case语句,每当新的日志详细信息添加到case语句并回显输出时,tail就不适用于case语句

    如果我使用cat/less/more,我可以得到输出

    你能告诉我我犯了什么错误吗


    提前感谢

    听起来您想要的模式是:

    tail -f /var/log/errorlog.txt | grep -e down -e unmounted | while read -r line
    do
        case "$line" in
            down)
                ./snmp.sh …
                ;;
            unmounted)
                ./snmp.sh …
                ;;
            *)
                echo "Unhandled keyword ${line}" >&2
                exit 1
        esac
    done
    
    试一试


    这个脚本会像识别关键字一样持续监视吗?它应该生成陷阱并从它离开的地方再次开始监视?另外,我的另一个问题是,我想再添加几个关键字,如error、unmounted、failure。。脚本应该一次查找所有关键字,并在发现任何关键字时启动snmptrap,因为没有陷阱。它只是对每一行执行命令。如果您想处理多个关键字,只需使用
    grep-e error-e unmounted…
    。是的,我知道了,但当我使用tail运行时,脚本会连续运行。我的问题是,假设第一个脚本监控了18行,找到了“down”关键字,并给出了警报,一旦生成警报,它应该返回到第19行并再次开始监控,如何配置?另一个澄清是,我们可以使用CASE函数来监控所有关键字并生成警报吗?这个解决方案正是这样做的。它永远运行,分别同步地处理每一场比赛。我没有发现这一点
    tail -f /var/log/errorlog.txt | grep "down" | while read line; do snmp.sh; done