限制脚本发送警报

时间:2009-04-16 19:00:46

标签: bash

我有一个bash脚本,用于检测在unix框上运行的失败的系统组件。脚本发送失败的电子邮件。该脚本每分钟运行一次(通过cron)。将警报发送到每15分钟一次的最简单方法是什么?

我可以在发送提醒时创建/更新文件吗?如果所述文件的日期是这么多分钟,我只能发送文件吗?

3 个答案:

答案 0 :(得分:2)

这样的事可能有用:

stamp=/tmp/mystamp
# create stamp file, if we haven't yet
[ ! -f $stmp ] && touch $stamp
tmp=$(tempfile)

# see if 15 minutes has passed...
diff=$(echo $(date -d "15 minutes ago"  +%y%d%m%H%M) - $(date -d "$(stat $tmp |grep Change |cut -d: -f2-)" +%y%d%m%H%M)  |bc)
rm $tmp

# if we last touched the stamp file less than 15 minutes ago
# then quit
[ $diff -le 0 ] && exit 0

# update the stamp file
touch $stamp

# do your thing...
echo 'Warning! Warning!' |mail -s "FOOBAR" your@address.com

答案 1 :(得分:1)

您可以实现发送警报的脚本的中间人。您可以将其发送到另一个实际可以拨打电话的脚本,而不是“直接”发送电子邮件(通过sendmail,另一个邮件应用程序)。然后,此脚本可以跟踪(使用另一个文件)上次发送邮件的时间。这样,您就可以查看发送它们的频率。 :)

答案 2 :(得分:0)

如果遇到错误情况,请触摸临时文件(例如/tmp/alert.email)。在脚本中接下来,检查文件是否存在以及是否存在且分钟数是0,15,30,45,然后发送电子邮件。我不确定这是否完全符合您的要求。基本上它:

  • 每15分钟发送一次电子邮件不超过一次。
  • 发送所有错误情况的电子邮件,但不一定立即发送。
  • 可能会立即或最多14分钟后发送错误消息。

所以稍后会有:

#!/bin/bash 

MIN=`date '+%M'`

if [ *ERROR_COND* ] ; then
   touch /tmp/alert.email
fi

if [[ -f /tmp/alert.email &&  ( $MIN = "15" || $MIN = "30" || $MIN = "45" || $MIN = "00" ) ]] ; then
   # email here
   rm -f /tmp/alert.email
fi