bash的只有电子邮件,如果去年以来发生的警报 [英] bash only email if occurrence since last alert

查看:108
本文介绍了bash的只有电子邮件,如果去年以来发生的警报的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在监视日志文件为特定的词,并使用TAC输出5行之前和之后

 #!/斌/庆典
TAC在/ var / log / syslog的| grep的-M1 -A5 -B5'字'| TAC>>的/ tmp / systemp
mailx的电子邮件命令
RM / tmp目录/ systemp

和我设置一个cron然而,每5分钟按预期运行我收到重复提醒电子邮件,我该怎么做,直到下一个发送电子邮件的最后出现,而不是一次?

  02月27日15时05分39秒WORD(电子邮件)
克龙5分钟后再次运行
2月27日15时05分39秒WORD(不支持电子邮件)
克龙5分钟后再次运行
2月27日15时35分39秒WORD(电子邮件)


解决方案

您应该只搜索槽最后5分钟的数据:

  data5m = $(awk的'$ 0 GT =从'从=$(日期+%B%E%H:%M:%S-d -5min) 在/ var / log / syslog的)

然后你可以从这个数据用grep:

 的grep -M1 -C5'字'<<< $ data5m


更新:

 的awk'$ 0 GT =从'从=$(日期+%B%E%H:%M:%S-d -5min)的/ var / log / syslog的| grep的-M1 -C5字

或者在一个 AWK

 的awk'{a [NR] = $ 0} /模式/&放大器;&安培; $ 0 GT =从{F = NR} END {为(I = F-5; I< = F + 5;我++)打印[I]}'从=$(日期+%B%E%H :%M:%S-d -5min)的/ var / log / syslog的

I'm monitoring a log file for a specific word and using tac to output the 5 lines before and after it

#!/bin/bash
tac /var/log/syslog |grep -m1 -A5 -B5 'WORD' | tac >> /tmp/systemp
mailx email commands  
rm /tmp/systemp

and I've setup a cron to run every 5 minutes however as expected I receive duplicate alert emails, how do I make it send an email for the last occurrence and not again until the next one?

ie

Feb 27 15:05:39 WORD (email)
Cron runs again after 5 minutes
Feb 27 15:05:39 WORD (don't email)
Cron runs again after 5 minutes 
Feb 27 15:35:39 WORD (email)

解决方案

You should only search trough last 5 min of data:

data5m=$(awk '$0>=from' from="$(date +"%b %e %H:%M:%S" -d -5min)" /var/log/syslog)

Then you can grep from this data:

grep -m1 -C5 'WORD' <<< "$data5m"


Update:

awk '$0>=from' from="$(date +"%b %e %H:%M:%S" -d -5min)" /var/log/syslog | grep -m1 -C5 'WORD'

Or all in one awk

awk '{a[NR]=$0} /pattern/ && $0>=from {f=NR} END {for (i=f-5;i<=f+5;i++) print a[i]}' from="$(date +"%b %e %H:%M:%S" -d -5min)" /var/log/syslog

这篇关于bash的只有电子邮件,如果去年以来发生的警报的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆