bash仅在上次提醒后发生的电子邮件

时间:2015-03-02 16:56:04

标签: bash scripting grep

我正在监视特定单词的日志文件,并使用tac输出前后的5行

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

我已经设置了一个每5分钟运行一次的cron,但是我按照预期会收到重复的警报电子邮件,如何让它发送最后一次发送的电子邮件,而不是直到下一次发送?

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 个答案:

答案 0 :(得分:1)

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

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

然后你可以从这些数据中得到:

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