0
点赞
收藏
分享

微信扫一扫

shell监控脚本


web服务器监控


应用场景:监控web服务器状态,异常时邮件报警。
脚本说明:通过wget(也可以用curl)监控服务器状态,如果不能正常访问,ping检测网
络,网络正常通知管理员检查服务,ping不通邮件通知管理员。
服务器列表使用数组,服务器状态函数使用返回值判断服务器是否异常。

[root@kittod ~]# cat server.sh
#!/bin/bash
#define var
RETVAL=0
FAILCOUNT=0
MAIL_USER="root@haha.com"
RED='\033[31m'
GREEN='\033[32m'
BLUE='\033[34m'
CLOSE='\033[0m'
#define server list
SERVER_ALL_LIST=(
192.168.91.128:80
192.168.91.129:80
192.168.91.130:80
)
SERVER_ALL_LEN=${#SERVER_ALL_LIST[*]}
#web detection function
LOG_FILE="/tmp/web_check.log"
function GetUrlStatus() {
 for ((j=1;j<=3;j++))
 do
 wget -T 10 --tries=1 --spider http://${1} > /dev/null 2>&1
 if [ $? -ne 0 ]
 thelet FAILCOUNT+=1
 else
 FAILCOUNT=0
 break
 fi
 done
 [ $FAILCOUNT -gt 1 ] && RETVAL=1 || RETVAL=0
 return $RETVAL
}
function Send_Mail() {
 NowTime=$(date +"%Y-%m-%d %H:%M:%S")
 SC="http://${1} service is error,${NowTime}."
 mail -s "$SC" $MAIL_USER < ${LOG_FILE}
}
#service check
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}')
 echo -n -e "${BLUE} check ${SERVER_ALL_LIST[$i]}: ${CLOSE}" |tee${LOG_FILE}
 if GetUrlStatus ${SERVER_ALL_LIST[$i]}
 then
 echo -e "${GREEN} Server is working properly! ${CLOSE}"
 elif ping -c 1 $SERVER_IP > /dev/null 2>&1
 then
 echo -e "${RED} ping ok,pls check service! ${CLOSE}" |tee-a ${LOG_FILE}
 Send_Mail ${SERVER_ALL_LIST[$i]}
 else
 echo -e "${RED} ping failure,pls Contact your administrator!
${CLOSE}" |tee -a ${LOG_FILE}
 Send_Mail ${SERVER_ALL_LIST[$i]}
 fi
 let i++
done
#Delete temporary files
rm -f ${LOG_FILE}
// 脚本执行及测试:{
[root@kittod ~]# bash server.sh
 check 192.168.91.128:80: ping ok, pls check service!n
 check 192.168.91.129:80: Server is working properly!
 check 192.168.91.130:80: ping failure,pls Contact your
administrator
邮件报警:(邮件中颜色无法显示)
•[34m check 172.21.200.16:80: •[0m•[31m ping failure,pls Contact
your administrator! •[0m
}
// 其他检测方法:
使用curl检测:
function GetUrlStatus() {
for ((j=1;j<=3;j++))
do
 SERVER_STATUS_CODE=$(curl -o /dev/null -s -m 10 --connect-timeout
10 -w %{http_code} "http://${1}")
 if [ ${SERVER_STATUS_CODE} -ne 200 ]
 then
 let FAILCOUNT+=1
 else
 FAILCOUNT=0
 break
 fi
done
[ $FAILCOUNT -gt 1 ] && RETVAL=1 || RETVAL=0
return $RETVAL
}
使用nmap探测端口是否open判断服务是否异常:
function GetUrlStatus() {
for ((j=1;j<=3;j++))
do
 SERVER_PORT_STATUS=$(nmap -P0 -p${SERVER_PORT} -sS -vv
${SERVER_IP} | grep ${SERVER_PORT} | tail -1 | awk '{print $2}')
 if [ "${SERVER_PORT_STATUS}" != "open" ]
 then
 let FAILCOUNT+=1
 else
 FAILCOUNT=0
 break
 fi
done
[ $FAILCOUNT -gt 1 ] && RETVAL=1 || RETVAL=0
return $RETVAL
}
 
举报

相关推荐

0 条评论