用ksh编写检测http服务

来源:互联网 发布:印度外汇储备数据 编辑:程序博客网 时间:2024/06/07 21:48

相关查考资料:

编辑脚本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")
#采用HTTPPOST方式发送检测信息给接口程序interface.php,接口程序负责分析信息,决定是否发送报警MSN消息、手机短信、电子邮件。
send_msg_to_interface()
{
       if [[ $2 = "0" ]] || [[ $2 = "2" ]]; then
               #开始发送警报短信,13500000000是接收方手机号
               curl -m 600 -d username=${telnum} -d password=${passwd} -dsendto=13500000000 -dmessage=$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 -dport=$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/null2>&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/null2>&1
      then
          status=1
          echo "服务器${server_ip},端口${server_port}能够正常访问!"
                  server_message="服务器${server_ip},端口${server_port}能够正常访问!";
      else
          if ping -c 1 $server_ip > /dev/null2>&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 crondrestart
 
这样脚本将会每5分钟执行一次,如果检查到网站故障就会触发报警
 
 
 
编写如下:一个简单的检测http
用ksh编写检测http服务