代码之家  ›  专栏  ›  技术社区  ›  cgp

限制脚本发送警报

  •  1
  • cgp  · 技术社区  · 15 年前

    我有一个bash脚本,它检测一个在Unix机器上运行的失败系统组件。脚本在失败时发送电子邮件。脚本每分钟运行一次via run(通过cron)。什么是最简单的方法来阻止每15分钟发送一次警报?

    我可以在发送警报时创建/更新一个文件,并且仅当该文件的日期早于几分钟时才发送该文件吗?

    3 回复  |  直到 15 年前
        1
  •  2
  •   vezult    15 年前

    类似的事情可能会奏效:

    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
    
        2
  •  1
  •   Anthony    15 年前

    您可以为发送警报的脚本实现中间切换。您可以将电子邮件“直接”(通过另一个邮件应用程序send mail)发送到另一个脚本,而不是直接发送。然后,该脚本可以跟踪(使用另一个文件)上次发送邮件的时间。这样,您就可以检查发送它们的频率。:)

        3
  •  0
  •   Tim    15 年前

    如果遇到错误情况,请触摸临时文件(例如/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