脚本原理:把所有要监控的网站dig IP出来,然后测试该IP的80端口是否能通,如果不通的话,则把在该IP上的所有站点列出来并报警。
这个是我最后修改的版本,10秒运行完161个站点(含在CDN的站点)所有检测,把需要检测的域名写到文件80_URL.txt 里面 每个域名一行。
注意:只能写域名,不要写具体的url,例如:
cat /root/sh/80_URL.txt
www.baidu.com
www.qq.com
www.163.com
部份常量说明:
ERROR 判断是否有异常,初始值0 有异常1 为1时发送邮件通知。通知方式参考:http://www.jb200.com/article/2609.html
ERROR_TEMP 一个域名多次检测 我配置6次异常的话,ERROR=1
Port 检测端口 默认80
DATE 当前时间
YouJianFuJian.txt 邮件附件,记录当时的dig 域名出来的结果。
/root/jiankong_log 习惯把监控的日志放这里了,呵~
脚本内容:
#!/bin/bash
mkdir -m 777 /root/jiankong_log
export LANG=en_US.UTF-8
Port=80
ERROR_TEMP=0
ERROR=0
DATE=`date +%Y-%m-%d" "%k:%M`
echo "$DATE from 121.11.121.177 check 80 error:">/root/jiankong_log/YouJianZhengWen.txt //标志从台检测出来的,因为我有2台监控
biaoti=''
echo "">/root/jiankong_log/YouJianFuJian.txt
echo "-------"$DATE"-------" >>/root/jiankong_log/80jianche.log
echo ''>/root/jiankong_log/ip_tmp.txt
echo "-----------"$DATE"---------">>/root/jiankong_log/error_temp.txt
###################
for Domain in `cat /root/sh/80_URL.txt`
do
echo "------------------$Domain--------------------">>/root/jiankong_log/YouJianFuJian.txt
#START###以下是检测域名是否dig为空的代码,根据情况选择是否开启######
# empty_temp=0
#for i in {1..6}
# do
# a=`dig +short $Domain | head -n 1`
# if [ "$a" != "" ]; then
# break;
# else
# empty_temp=`expr $empty_temp "+" 1`
# ping -c 5 $Domain
# sleep 2
# fi
# if [ "$empty_temp" == "6" ];then
# echo "$Domain dig empty" >>/root/jiankong_log/YouJianZhengWen.txt
# echo "$Domain dig empty" >>/root/jiankong_log/YouJianFuJian.txt
# echo "$Domain dig empty" >>/root/jiankong_log/80jianche.log
# ERROR=1
# biaoti="$biaoti"-"$Domain"
# fi
# done
#END###以上是检测域名是否dig为空的代码,根据情况选择是否开启######
####
for IP in `dig +short $Domain`
do
echo "$IP" >>/root/jiankong_log/ip_tmp.txt
echo "$Domain -----> $IP" >>/root/jiankong_log/YouJianFuJian.txt
done
done
######################
cat /root/jiankong_log/ip_tmp.txt |grep -v ^$| sort -r | uniq | grep "." >/root/jiankong_log/ip.txt
for newip in `cat /root/jiankong_log/ip.txt |grep -v "#"|grep -Ev "com|58.253.70|221.5" `
do
ERROR_TEMP=0
for n in {1..6} //检测次数
do
nmap -sT $newip -p $Port | grep open
if [ "$?" == "0" ];then
break; //检测到80端口有开,马上跳出此次循环。
else
ERROR_TEMP=`expr $ERROR_TEMP "+" 1`
echo "$newip error in ---- $n ----" >>/root/jiankong_log/error_temp.txt
fi
if [ "$ERROR_TEMP" == "6" ];then
ERROR=1
biaoti="$biaoti"-"$Domain"
grep $newip /root/jiankong_log/YouJianFuJian.txt >>/root/jiankong_log/YouJianZhengWen.txt
grep $newip /root/jiankong_log/YouJianFuJian.txt >>/root/jiankong_log/80jianche.log
fi
done
done
if [ "$ERROR" == "1" ];then
cat /root/jiankong_log/YouJianZhengWen.txt | /usr/local/mutt/bin/mutt -s "$biaoti is error" 1516070****@139.com -c 281450202@qq.com -a /root/jiankong_log/YouJianFuJian.txt //这里的邮件发送方式参考我的另一个,或者根据自己的情况去改下。
else
echo "all is nothing" >>/root/jiankong_log/80jianche.log
fi
复制到文件里面,然后执行,如果文件路径都正常,是可以的。