利用shell腳本監控網站狀態

最近公司服務器所在機房常因***和網絡故障致使網站沒法正常訪問,爲了能第一時間獲知網站沒法訪問,並快速處理問題,特利用shell腳本對服務器訪問情況進行監控,一但網站沒法訪問便可觸發短信報警,這裏面參考了張晏和junnan的博文,在此表示感謝!!
 
         首先須要有一個已開通飛信的手機號,並把接收警報短信的手機號加爲飛信好友(也能夠本身給本身發),調用 飛信的免費短信接口 發送報警短信,也可以使用MSN報警,相對短信報警更及時。
         編輯腳本http.sh
vi /opt/http.sh
 
#!/bin/sh
LANG=C
 
#被監控服務器、端口列表
server_all_list=(\
www.qq.com:80 \
www.163.com:80 \
www.sina.com:80 \
)
 
telnum=已開通飛信的手機號
passwd=飛信密碼
 
date=$(date -d "today" +"%Y-%m-%d_%H:%M:%S")
#採用HTTP POST方式發送檢測信息給接口程序interface.php,接口程序負責分析信息,決定是否發送報警MSN消息、手機短信、電子郵件。
send_msg_to_interface()
{
        if [[ $2 = "0" ]] || [[ $2 = "2" ]]; then
                #開始發送警報短信,13500000000是接收方手機號
                curl -m 600 -d username=${telnum} -d password=${passwd} -d sendto=13500000000 -d message=$1 
http://sms.api.bz/fetion.php
  echo "`date +'%Y-%m-%d %H:%M:%S'`      $1 ">> http_down.log
                #發送msn警報消息(若是不須要msn警報能夠註釋這行)
#               curl -m 600 -d menu=http -d date=$date -d ip=$server_ip -d port=$server_port -d status=$status
http://127.0.0.1/monitor/interface.php
        fi;
}
 
server_all_len=${#server_all_list[*]}
i=0
while  [ $i -lt $server_all_len ]
do
   server_ip=$(echo ${server_all_list[$i]} | awk -F ':' '{print $1}')
   server_port=$(echo ${server_all_list[$i]} | awk -F ':' '{print $2}')
   server_message=" "
   if curl -m 10 -G
http://${server_all_list[$i]}/ > /dev/null 2>&1
   then
     #status:    0,http down    1,http ok    2,http down but ping ok
     status=1
           echo "服務器${server_ip},端口${server_port}可以正常訪問!";
                   server_message="服務器${server_ip},端口${server_port}可以正常訪問!";
   else
       if curl -m 30 -G
http://${server_all_list[$i]}/ > /dev/null 2>&1
       then
           status=1
           echo "服務器${server_ip},端口${server_port}可以正常訪問!"
                   server_message="服務器${server_ip},端口${server_port}可以正常訪問!";
       else
           if ping -c 1 $server_ip > /dev/null 2>&1
           then
               status=2
               echo "服務器${server_ip},端口${server_port}沒法訪問,可是可以Ping通!";
                           server_message="服務器${server_ip},端口${server_port}沒法訪問,可是可以Ping通!";
           else
               status=0
               echo "服務器${server_ip},端口${server_port}沒法訪問,而且沒法Ping通!";
                           server_message="服務器${server_ip},端口${server_port}沒法訪問,而且沒法Ping通!";
           fi
       fi
   fi
 send_msg_to_interface "${server_message}" "${status}";
   let i++
done
 
interface.php (須要設置監控端服務器的讓其可訪問到,如:http://127.0.0.1/monitor/interface.php,與上面腳本對應)
這裏須要一個PHP類
sendMsg ,用來經過PHP發送消息到MSN,下載後把目錄解壓到interface.php目錄便可。
 
include('sendmsg/sendMsg.php');
 
//HTTP服務器監控
if (isset($_POST["menu"]))
{
 if (htmlspecialchars($_POST["menu"]) == "http")  
 {  
  $date = htmlspecialchars($_POST["date"]);  
  $ip = htmlspecialchars($_POST["ip"]);
  $port = htmlspecialchars($_POST["port"]);
  $status = htmlspecialchars($_POST["status"]);//狀態,0表示沒法訪問,1表示正常,2表示沒法訪問但能ping通
 
  $message = '';
  switch($status)
  {
   case '0':
    $message = $ip . '服務器沒法訪問';
    break;
   case '1':
    $message = $ip . '服務器工做正常';
    break;
   case '2':
    $message = $ip . '服務器沒法訪問但能ping通';
    break;
  }
 
  if ($status == 0 && $status == 1)
  {
   $sendMsg = new sendMsg();
   $sendMsg->login('用來發消息的MSN賬號', '密碼');
   $sendMsg->createSession('用來接收消息的MSN賬號');
   $sendMsg->sendMessage(iconv("GBK", "UTF-8", $message), 'Times New Roman', 'FF0000');
 
  }
 }
}
而後執行crontab -e,加入以下語句:
 
*/5 * * * * sh /opt/http.sh
 
service crond restart
 
這樣腳本將會每5分鐘執行一次,若是檢查到網站故障就會觸發報警
相關文章
相關標籤/搜索