我有一個bash腳本,它檢測在unix盒子上運行的失敗系統組件。該腳本發送失敗時的電子郵件。腳本每分鐘運行一次(通過cron)。限制每15分鐘發送一次警報的最簡單方法是什麼?限制腳本發送警報
我可以在發送提醒時創建/更新文件,只在文件的日期如此之多時才發送文件?
我有一個bash腳本,它檢測在unix盒子上運行的失敗系統組件。該腳本發送失敗時的電子郵件。腳本每分鐘運行一次(通過cron)。限制每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" [email protected]
您可以爲發送警報的腳本實現中介。不是直接發送電子郵件(通過sendmail,另一個郵件應用程序),你可以將它發送到另一個實際上會打電話的腳本。然後,此腳本可以跟蹤(使用另一個文件)上次發送郵件的時間。這樣,你可以檢查你多久發送一次。 :)
如果您遇到的錯誤,觸摸一個臨時文件(比如/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