【问题标题】:Monitor log file for a keyword then send an email notification监控关键字的日志文件,然后发送电子邮件通知
【发布时间】:2019-05-10 02:26:52
【问题描述】:

我想监视一个不断生成的日志,以获取一个关键字来让我知道组件是否已关闭。确定关键字后,我希望通过电子邮件通知我的个人 gmail。

到目前为止,我已经能够分别完成关键字监控和电子邮件通知,但从来没有在一个脚本中一起完成。我尝试了以下方法进行监控:

tail -fn0 user | awk '/disconnect_tcp_conn/ { print | "echo server down" }'

这个要发邮件:

mail -s "server down.... again" blahblah@gmail.com < /dev/null

我尝试使用 grep 进行监控,但 awk 似乎效果最好.. 至少就我使用它的方式而言。只是似乎无法使语法正确以使两者同时工作。

我试过了:

tail -fn0 user | awk '
                    /disconnect_tcp_conn/ { print | "echo server down") }
                    /disconnect_tcp_conn/ { system( "mail -s "server down.... again" blahblah@gmail.com < /dev/null ") }'

还有:

tail -fn0 user | awk '
                    /disconnect_tcp_conn/ { print | "echo server down") }
                    /disconnect_tcp_conn/ { cmd=mail -s "server down.... again3" blahblah@gmail.com < /dev/null ") }'

任何帮助都会很棒。谢谢!

【问题讨论】:

    标签: linux shell awk


    【解决方案1】:

    {action} 中可以包含多行,并且可以转义双引号 \" 以通过 system()

    tail -fn0 user | awk '/disconnect_tcp_conn/ { 
        system("mail -s \"server down... again\" blahblah@gmail.com </dev/null") 
        print "server down... again"
        exit
    }'
    

    【讨论】:

    • 无法打开“用户”进行阅读:没有这样的文件或目录尾部:没有剩余文件
    • 以上是@vintnes的结果
    • @Sceptersax 使用您尝试读取的文件的完整路径,或者先使用cd 进入目录
    • 啊。应该想到@vintnes。我早上在办公室试试。谢谢
    • 完美。谢谢
    【解决方案2】:

    也可以简单的如下:

    tail -f /path/to/file | while read line
    do case "$line" in
            *"server down"*) echo "$line" | mutt -s "Server Down" an_email@mail.com;
            ;;
       esac
    done
    

    【讨论】:

    • 这似乎也有效,但是当我替换为“an_email@email.com;”时我收到的电子邮件:没有指定收件人。我确信通过我的一些小的调整这会起作用,但我将只使用 awk 命令来实现这一点。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多