shell 監控網站是否異常的指令碼,如有異常自動發電郵通知管理員。
流程:
1.檢查網站返回的http_code是否等於200,如不是200視為異常。
2.檢查網站的訪問時間,超過MAXLOADTIME(10秒)視為異常。
3.發送通知電郵後,在/tmp/monitor_load.remark記錄發送時間,在一小時內不重複發送,如一小時後則清空/tmp/monitor_load.remark。
#!/bin/bash SITES=("http://web01.example.com" "http://web02.example.com") # 要監控的網站 NOTICE_EMAIL='me@example.com' # 管理員電郵 MAXLOADTIME=10 # 訪問逾時時間設定 REMARKFILE='/tmp/monitor_load.remark' # 記錄時否發送過通知電郵,如發送過則一小時內不再發送 ISSEND=0 # 是否有發送電郵 EXPIRE=3600 # 每次發送電郵的間隔秒數 NOW=$(date +%s) if [ -f "$REMARKFILE" ] && [ -s "$REMARKFILE" ]; then REMARK=$(cat $REMARKFILE) # 刪除到期的電郵發送時間記錄檔案 if [ $(( $NOW - $REMARK )) -gt "$EXPIRE" ]; then rm -f ${REMARKFILE} REMARK="" fi else REMARK="" fi # 迴圈判斷每個site for site in ${SITES[*]}; do printf "start to load ${site}\n" site_load_time=$(curl -o /dev/null -s -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}" "${site}") site_access=$(curl -o /dev/null -s -w %{http_code} "${site}") time_total=${site_load_time##*:} printf "$(date '+%Y-%m-%d %H:%M:%S')\n" printf "site load time\n${site_load_time}\n" printf "site access:${site_access}\n\n" # not send if [ "$REMARK" = "" ]; then # check access if [ "$time_total" = "0.000" ] || [ "$site_access" != "200" ]; then echo "Subject: ${site} can access $(date +%Y-%m-%d' '%H:%M:%S)" | sendmail ${NOTICE_EMAIL} ISSEND=1 else # check load time if [ "${time_total%%.*}" -ge ${MAXLOADTIME} ]; then echo "Subject: ${site} load time total:${time_total} $(date +%Y-%m-%d' '%H:%M:%S)" | sendmail ${NOTICE_EMAIL} ISSEND=1 fi fi fi done # 發送電郵後記錄發送時間 if [ "$ISSEND" = "1" ]; then echo "$(date +%s)" > $REMARKFILE fi exit 0
更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Servers/web/