我正在监视特定单词的日志文件,并使用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)
答案 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