700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 利用shell脚本监控网站状态

利用shell脚本监控网站状态

时间:2021-04-10 08:58:32

相关推荐

利用shell脚本监控网站状态

首先需要有一个已开通飞信的手机号,并把接收警报短信的手机号加为飞信好友(也可以自己给自己发),调用飞信的免费短信接口发送报警短信,也可使用MSN报警,相对短信报警更及时。

编辑脚本http.sh

vi /opt/http.sh

#!/bin/sh

LANG=C

#被监控服务器、端口列表

server_all_list=(\

:80 \

:80 \

: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分钟执行一次,如果检查到网站故障就会触发报警

以上脚本运行了很长一段时间都很正常,也能第一时间了解服务器的down机情况,但最近发现不能报警了,飞信的短信接口不能调用了,无奈只能借助于139邮件报警,邮箱跟手机绑定

利用sendEmail发送报警邮件:

cd /opt

wget /menu/Software/SendEmail/sendEmail-v1.56.tar.gz

tar -zxvf sendEmail-v1.56.tar.gz

cd sendEmail-v1.56

cp sendEmail /usr/local/bin

chmod +x /usr/local/bin/sendEmail

#sendEmail使用方法

sendEmail -f 13512345678@ -t 13512345678@ -s -u "from cacti" -xu 13512345678@ -xp 123456 -o message-charset=utf-8 -m “测试邮件发送”

#解释:-f 表示发送者的邮箱

-t 表示接收者的邮箱

-s 表示SMTP服务器的域名或者ip

-u 表示邮件的主题

-xu 表示SMTP验证的用户名

-xp 表示SMTP验证的密码(注意,这个密码貌似有限制,例如我用d!5neyland就不能被正确识别)

-m 表示邮件的内容如果你不带-m参数的话,就会提示你自行输入

-o 文本信息字符集,如不加这一项,发送的中文信息就会变成乱码

把原脚本中的

curl -m 600 -d username=${telnum} -d password=${passwd} -d sendto=13500000000 -d message=$1 http://sms.api.bz/fetion.php

修改为:

sendEmail -f 13512345678@ -t 13512345678@ -s -u "from cacti" -xu 13512345678@ -xp 123456 -o message-charset=utf-8 -m $1

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。