同时管理太多Linux服务器,如有提供WEB服务,邮件服务,有FTP文件服务,有数据库服务器,那么如何有效的来管理,是件烦琐的事,我采用一台监控服务器,不停的扫描工作服务器,如果那台服务器,出现故障,自动报警。
可以使用MSN消息,也可以采用手机短信,手机短信可以用的移动邮件功能,使报警信息以邮件方式发送。
本报警用Shell脚本+php程序,PHP接口程序接收shell脚本传递的信息并进行分析是否发送MSN信息和手机邮件。
-
WEB服务器监控脚本:
#!/bin/sh
LANG=C
#被监控服务器、端口列表
server_all_list=(\
192.168.1.1:80 \
192.168.1.2:80 \
192.168.1.3:80 \
192.168.1.9:80 \
)
date=$(date -d "today" +"%Y-%m-%d_%H:%M:%S")#采用HTTP POST方式发送检测信息给接口程序boobooke.php,接口程序负责分析信息,决定是否发送报警MSN消息
send_msg()
{
/usr/bin/curl -m 10 -d menu=http -d date=$date -d ip=$server_ip -d port=$server_port -d status=$status
}
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}')
#status: 0,http down 1,http ok 2,http down but ping ok
if curl -m 10 -G > /dev/null 2>&1
then
status=1
echo "服务器${server_ip},端口${server_port}能够正常访问!"
else
if ping -c 1 $server_ip > /dev/null 2>&1
then
status=2
echo "服务器${server_ip},端口${server_port}无法访问,但是能够Ping通!"
else
status=0
echo "服务器${server_ip},端口${server_port}无法访问,并且无法Ping通!"
fi
fi
#echo $status
send_msg
send_msg
let i++
done
2. PHP接口程序:
/**
*********************************************************************
* Copyright (c) 2008, [赶星]
* All rights reserved.
*
* 文件名称: boobooke.php
* 摘 要: 服务器监控系统※赶星修改※接口程序
* 描 述:
* 作 者: 张宴 新浪UC:103500 博客:blog.s135.com
* 作 者: 赶星 QQ:10908105 博客:
* 版 本: 1.4
* 时 间: 2008-10-25
*********************************************************************
*/
//-----------------定义发msn函数---------------
function sendmsn()
{
$send_msn = "机器人MSN帐号
$send_msn_password = "boobooke";//机器人MSN密码
$re_msn = "接收管理员MSN帐号
global $message;
error_reporting(E_ALL);
include('sendMsg.php');
$sendMsg = new sendMsg();
$sendMsg->login($send_msn,$send_msn_password);
$sendMsg->createSession($re_msn);
$sendMsg->sendMessage(iconv("GBK", "UTF-8", $message), 'Times New Roman', '008000');
}
//--------------函数定义结束-------------------
//HTTP服务器监控
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 = "WEB服务器监控系统 ※赶星修改※ V1.4\r\n";
$message = $message . "----------------------------------------\r\n";
$message = $message . "报警服务器:" . $ip . "\r\n";
$message = $message . "----------------------------------------\r\n";
$message = $message . "报警端口:" . $port . "\r\n";
$message = $message . "----------------------------------------\r\n";
$message = $message . "报警时间:" . $date . "\r\n";
$message = $message . "----------------------------------------\r\n";
$message = $message . "报警内容:\r\n";
if ($status==0)
{
$message = $message . "●无法访问,并且无法ping能,请火速处理~_~";
$is_send_msn="1";
}
if ($status==1)
{
$message = $message . "●一切正常";
$is_send_msn="0";
}
if ($status==2)
{
$message = $message . "●服务器无法访问,但是能够Ping通";
$is_send_msn="1";
}
if ($is_send_msn == "1")
{
sendmsn();//发MSN信息
mail(, "机器报警", $message, 手机短信功能。
}
else
{
echo "★一切正常,无须发送报警MSN消息!\n";
}
}
?>
发送MSN短消息用了一个PHP类:sendMsg(网上可以下载到),使用该PHP类发消息,必须将发送、接收双方的MSN互加为联系人,发送中文时,先用iconv将字符集转为UTF-8: $sendMsg->sendMessage(iconv("GBK", "UTF-8", $message), 'Times New Roman', '008000');
在线视频讲解:
============================================
在线观看:
在线观看:
============================================