日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用shell脚本监控网站状态

發(fā)布時(shí)間:2023/12/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用shell脚本监控网站状态 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先需要有一個(gè)已開通飛信的手機(jī)號,并把接收警報(bào)短信的手機(jī)號加為飛信好友(也可以自己給自己發(fā)),調(diào)用飛信的免費(fèi)短信接口發(fā)送報(bào)警短信,也可使用MSN報(bào)警,相對短信報(bào)警更及時(shí)。

編輯腳本http.sh
vi /opt/http.sh

#!/bin/sh
LANG=C

#被監(jiān)控服務(wù)器、端口列表
server_all_list=(\
www.qq.com:80 \
www.163.com:80 \
www.sina.com:80 \
)

telnum=已開通飛信的手機(jī)號
passwd=飛信密碼

date=$(date -d "today" +"%Y-%m-%d_%H:%M:%S")

#采用HTTP POST方式發(fā)送檢測信息給接口程序interface.php,接口程序負(fù)責(zé)分析信息,決定是否發(fā)送報(bào)警MSN消息、手機(jī)短信、電子郵件。
send_msg_to_interface()
{
if [[ $2 = "0" ]] || [[ $2 = "2" ]]; then
#開始發(fā)送警報(bào)短信,13500000000是接收方手機(jī)號
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
#發(fā)送msn警報(bào)消息(如果不需要msn警報(bào)可以注釋這行)
# 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 "服務(wù)器${server_ip},端口${server_port}能夠正常訪問!";
server_message="服務(wù)器${server_ip},端口${server_port}能夠正常訪問!";
else
if curl -m 30 -G http://${server_all_list[$i]}/ > /dev/null 2>&1
then
status=1
echo "服務(wù)器${server_ip},端口${server_port}能夠正常訪問!"
server_message="服務(wù)器${server_ip},端口${server_port}能夠正常訪問!";
else
if ping -c 1 $server_ip > /dev/null 2>&1
then
status=2
echo "服務(wù)器${server_ip},端口${server_port}無法訪問,但是能夠Ping通!";
server_message="服務(wù)器${server_ip},端口${server_port}無法訪問,但是能夠Ping通!";
else
status=0
echo "服務(wù)器${server_ip},端口${server_port}無法訪問,并且無法Ping通!";
server_message="服務(wù)器${server_ip},端口${server_port}無法訪問,并且無法Ping通!";
fi
fi
fi
send_msg_to_interface "${server_message}" "${status}";
let i++
done

interface.php (需要設(shè)置監(jiān)控端服務(wù)器的讓其可訪問到,如:http://127.0.0.1/monitor/interface.php,與上面腳本對應(yīng))
這里需要一個(gè)PHP類sendMsg,用來通過PHP發(fā)送消息到MSN,下載后把目錄解壓到interface.php目錄即可。


include('sendmsg/sendMsg.php');
//HTTP服務(wù)器監(jiān)控
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"]);//狀態(tài),0表示無法訪問,1表示正常,2表示無法訪問但能ping通

$message = '';
switch($status)
{
case '0':
$message = $ip . '服務(wù)器無法訪問';
break;
case '1':
$message = $ip . '服務(wù)器工作正常';
break;
case '2':
$message = $ip . '服務(wù)器無法訪問但能ping通';
break;
}

if ($status == 0 && $status == 1)
{
$sendMsg = new sendMsg();
$sendMsg->login('用來發(fā)消息的MSN帳號', '密碼');
$sendMsg->createSession('用來接收消息的MSN帳號');
$sendMsg->sendMessage(iconv("GBK", "UTF-8", $message), 'Times New Roman', 'FF0000');

}
}
}

然后執(zhí)行crontab -e,加入如下語句:
*/5 * * * * sh /opt/http.sh
service crond restart

這樣腳本將會每5分鐘執(zhí)行一次,如果檢查到網(wǎng)站故障就會觸發(fā)報(bào)警
以上腳本運(yùn)行了很長一段時(shí)間都很正常,也能第一時(shí)間了解服務(wù)器的down機(jī)情況,但最近發(fā)現(xiàn)不能報(bào)警了,飛信的短信接口不能調(diào)用了,無奈只能借助于139郵件報(bào)警,郵箱跟手機(jī)綁定



利用sendEmail發(fā)送報(bào)警郵件:

cd /opt
wget http://caspian.dotconf.net/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@139.com -t 13512345678@139.com -s smtp.139.com -u "from cacti" -xu 13512345678@139.com -xp 123456 -o message-charset=utf-8 -m “測試郵件發(fā)送”
#解釋:-f 表示發(fā)送者的郵箱
-t 表示接收者的郵箱
-s 表示SMTP服務(wù)器的域名或者ip
-u 表示郵件的主題
-xu 表示SMTP驗(yàn)證的用戶名
-xp 表示SMTP驗(yàn)證的密碼(注意,這個(gè)密碼貌似有限制,例如我用d!5neyland就不能被正確識別)
-m 表示郵件的內(nèi)容如果你不帶-m參數(shù)的話,就會提示你自行輸入
-o 文本信息字符集,如不加這一項(xiàng),發(fā)送的中文信息就會變成亂碼

把原腳本中的

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


修改為:
sendEmail -f 13512345678@139.com -t 13512345678@139.com -s smtp.139.com -u "from cacti" -xu 13512345678@139.com -xp 123456 -o message-charset=utf-8 -m $1

轉(zhuǎn)載于:https://blog.51cto.com/ltblog/846880

總結(jié)

以上是生活随笔為你收集整理的利用shell脚本监控网站状态的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。