Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/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
如何在bash中扫描日志文件以查找错误_Bash - Fatal编程技术网

如何在bash中扫描日志文件以查找错误

如何在bash中扫描日志文件以查找错误,bash,Bash,我想扫描日志文件以查找JDBC和JMS异常,如果发现此类错误,则发送电子邮件 这里关于tail的问题是: 我不能定期执行shell脚本 如果有人杀死从我的shell脚本调用的tail命令,那么我将不再收到电子邮件警报 到目前为止,我已经开发了以下脚本: #!/bin/bash #This shell script monitors application logs file and sends alert email in case of JDBC or JMS error. export L

我想扫描日志文件以查找JDBC和JMS异常,如果发现此类错误,则发送电子邮件

这里关于tail的问题是:

  • 我不能定期执行shell脚本
  • 如果有人杀死从我的shell脚本调用的tail命令,那么我将不再收到电子邮件警报
  • 到目前为止,我已经开发了以下脚本:

    #!/bin/bash
    #This shell script monitors application logs file and sends alert email in case of JDBC or JMS error.
    
    export LOGFILE=/usr/app/$USER/data/logs/dummyapp.log
    export EMAILRECIPIENTLIST="opsteamdl@company.com"
    
    #-------------------------------------------------------------------------
    #----------- DO NOT EDIT AFTER THIS LINE ---------------------------------
    #-------------------------------------------------------------------------
    echo "Scanning log file - $LOGFILE"
    tail -f $LOGFILE|while read line;
    do
    echo $line
    if [ `echo $line|grep JDBCConnectionException|wc -l` -ne 0 ]; then
            mailx -s "[URGENT] - JDBCConnectionException reported in log" $EMAILRECIPIENTLIST < echo $line;
    else if [ `echo $line|grep javax.jms.JMSException|wc -l` -ne 0 ]; then
            mailx -s "[URGENT] - javax.jms.JMSException reported in log" $EMAILRECIPIENTLIST < echo $line;
    fi
    fi
    done
    exit
    
    #/bin/bash
    #此shell脚本监视应用程序日志文件,并在出现JDBC或JMS错误时发送警报电子邮件。
    导出日志文件=/usr/app/$USER/data/logs/dummyapp.log
    导出EMAILRECIPIENTLIST=”opsteamdl@company.com"
    #-------------------------------------------------------------------------
    #-----------请勿在此行之后编辑---------------------------------
    #-------------------------------------------------------------------------
    echo“扫描日志文件-$LOGFILE”
    tail-f$LOGFILE |在读取行时;
    做
    回音$线
    if[`echo$line | grep jdbconnectionexception | wc-l`-ne 0];然后
    mailx-s“[URGENT]-日志“$EMAILRECIPIENTLIST
    您的脚本看起来不错,只是做了一些改进:

    tail -f $LOGFILE|while read line;
    do
    echo "$line"
    if $(echo $line|grep -Eq "JDBCConnectionException")
    then
        echo "$line" | mailx -s "[URGENT] - JDBCConnectionException reported in log" $EMAILRECIPIENTLIST && pkill -P $$ tail
    elif $(echo $line|grep -Eq "javax.jms.JMSException")
     then
        echo "$line" | mailx -s "[URGENT] - javax.jms.JMSException reported in log" $EMAILRECIPIENTLIST && pkill -P $$ tail
    fi
    done
    
    ======================================================

    pkill-p$$tail
    :终止脚本启动的
    tail
    命令。
    如果您想让脚本运行,可以排除此部分。

    我不能定期执行shell脚本是什么意思,有
    crontab
    watch
    at
    等工具可以让您的命令按照您的要求运行!这将导致多个tail命令在后台运行,在审计期间很难证明这一点。