2015-03-02 62 views
0

我监视日志文件,一个单词之前使用TAC输出5日线后出现它bash的只有电子邮件,如果自去年警报

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

和我设置一个cron运行每5分钟一次,但如预期的那样,我收到重复的提醒邮件,我如何让它发送最后一次发送的电子邮件,直到下一次发送邮件为止?

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) 

回答

1

你应该只搜索波谷最后5分钟的数据:

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

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

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

更新:

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

或全部一个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 
+0

酷嵌入式'date',但是你就不能管'awk'输出到'grep'? – shellter 2015-03-02 18:23:18

+0

@shellter,是的,你可以。你甚至可以用'awk'完成所有的工作,但如果你喜欢之前的5个命中和5个之后的命中,它会变得更加复杂。你也可以用'-C5'改变'-A5'和'-B5',看我的更新。 – Jotne 2015-03-02 19:36:29

+0

谢谢Jotne的一个问题是,即使没有出现这个词,即空白的电子邮件,它也会通过电子邮件发送给我。 – Lurch 2015-03-03 08:21:41