用ksh编写检测http服务
2011-03-21 14:36
267 查看
相关查考资料:
编辑脚本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分钟执行一次,如果检查到网站故障就会触发报警 编写如下:一个简单的检测http
编辑脚本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');
}
}
}
相关文章推荐
- 用ksh编写检测http服务
- http://blog.csdn.net/javachannel/article/details/752437编写你自己的单点登录(SSO)服务桌面sso
- 为 SOAP/HTTP Web 服务编写可靠的客户机
- 编写脚本程序用于监测系统服务http的运行状态
- 检测到指定的WEB服务器运行的不是ASP.NET 1.1版,您无法运行ASP.NET应用程序或服务和创建ASP.NET程序时候发生错误 HTTP/1.0 500 Server Error的解决方法
- 隐藏在squid3的HTTP代理服务后面的主机IP地址为什么能检测到?
- golang中使用原生的http包编写一个web服务
- Python实现批量检测HTTP服务的状态
- 问题:C++编写的核心模块如何暴露给外部HTTP Web服务接口???
- HTTP协议----(2)Java程序检测HTTP服务是否打开
- 检测http服务(数组与函数)
- Python实现批量检测HTTP服务的状态
- 用MFC 和Sockets 编写基于HTTP 服务的例子(链接)
- 一个简简单单检测http服务状态的脚本
- springMVC编写服务接口——四种入参方式(@PathVariable、@RequestParam、@RequestBody、HttpServletRequest)
- 使用.net编写的 短连接(短网址)服务
- [转载]Windows服务编写原理及探讨(3)
- Android中使用HTTP服务
- C#编写Windows服务程序图文教程
- [转]提供一个C#编写的基类源码(用于操作WINDOWNS系统的服务)