bash的只有电子邮件,如果去年以来发生的警报 [英] bash only email if occurrence since last alert
本文介绍了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屋!
查看全文