我有一个bash脚本,用于检测在unix框上运行的失败的系统组件。脚本发送失败的电子邮件。该脚本每分钟运行一次(通过cron)。将警报发送到每15分钟一次的最简单方法是什么?
我可以在发送提醒时创建/更新文件吗?如果所述文件的日期是这么多分钟,我只能发送文件吗?
答案 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,然后发送电子邮件。我不确定这是否完全符合您的要求。基本上它:
所以稍后会有:
#!/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