Shell-Script
如果程序停止觸摸文件,則創建警報通知
我已經設置了一個非常簡單的腳本,這樣我就可以測試一個程序是否正在執行,如果是,那麼它將觸及一個文件,一切都會好起來的。但是,如果程序沒有執行並且文件沒有被觸及,那麼我希望能夠設置一個警報。
pgrep “sleep” >/dev/null && touch monitor.log
該腳本每分鐘在 crontab 中執行。如果文件沒有被觸及,我需要一種方法來提醒它?這可能嗎?
謝謝
這是一個簡單的文件修改時間檢查;複雜性主要來自每天多達 86,400 個警報的可能性(通常在長假週末是這類事情發生的時候),以及是否修改時間檢查器(或 cron 或系統.. .) 是否正在實際執行,主機時鐘是否正確(virts 上的時間偏差、四年後的 BIOS 時鐘、損壞的 NTP 等)。
#!/bin/sh # what we're checking for mtime changes straying from the current system time MONITOR=foofile THRESHOLD=60 # use mtime on this file to avoid frequent alert spam should the above stop # being updated LAST_ALERT=barfile LAST_ALERT_THRESHOLD=60 NOW_MTIME=`date +%s` absmtimedelta() { delta=`expr $NOW_MTIME - $1` # absolute delta, in the event the mtime is wrong on the other side of # the current time echo $delta | tr -d - } alertwithlesscronspam() { msg=$1 if [ ! -f "$LAST_ALERT" ]; then # party like it's touch -t 199912312359 -- "$LAST_ALERT" fi # KLUGE this stat call is unportable, but that's shell for you last_mtime=`stat -c '%Y' -- "$LAST_ALERT"` last_abs_delta=`absmtimedelta $last_mtime` if [ $last_abs_delta -gt $LAST_ALERT_THRESHOLD ]; then # or here instead send smoke signals, carrier pigeon, whatever echo $msg touch -- "$LAST_ALERT" exit 1 fi } if [ ! -r "$MONITOR" ]; then alertwithlesscronspam "no file alert for '$MONITOR'" fi MONITOR_MTIME=`stat -c '%Y' -- "$MONITOR"` ABS_DELTA=`absmtimedelta $MONITOR_MTIME` if [ $ABS_DELTA -gt $THRESHOLD ]; then alertwithlesscronspam "mtime alert for '$MONITOR': $ABS_DELTA > $THRESHOLD" fi
也許可以考慮一個標準的監控框架,它可能支持文件修改時間檢查或外掛,可定制的警報、指標、比上述更好的程式碼等。