2009-04-16 74 views
1

我有一個bash腳本,它檢測在unix盒子上運行的失敗系統組件。該腳本發送失敗時的電子郵件。腳本每分鐘運行一次(通過cron)。限制每15分鐘發送一次警報的最簡單方法是什麼?限制腳本發送警報

我可以在發送提醒時創建/更新文件,只在文件的日期如此之多時才發送文件?

回答

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" [email protected] 
1

您可以爲發送警報的腳本實現中介。不是直接發送電子郵件(通過sendmail,另一個郵件應用程序),你可以將它發送到另一個實際上會打電話的腳本。然後,此腳本可以跟蹤(使用另一個文件)上次發送郵件的時間。這樣,你可以檢查你多久發送一次。 :)

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