1 #!/bin/bash 2 3 #NginxConfigDir=/opt/nginx/conf 4 error_log=/home/www/check_port/error_log 5 6 #Host_Port=`find $NginxConfigDir -name "*.conf" | xargs -i grep server {} | grep -v '#' | egrep -o '([0-9]{1,3}.){3}[0-9]{1,3}:[0-9]{1,5}' | sort -u | awk -F: '{print $1" "$2 }'` 7 8 #从配置文件读出主机 端口 错误次数 超时时间 9 while read Host Port Error WaitTime 10 do 11 error_num=0 12 while : 13 do 14 DT=`date +%F-%R` 15 nc -w $WaitTime -n $Host -z $Port 16 if [ $? -eq 0 ] 17 then 18 #重置错误次数并跳出循环 19 error_num=0 20 break 21 else 22 #增加错误次数并记录日志 23 error_num=$(($error_num+1)) 24 echo "$DT Host: $Host Port: $Port error " >> $error_log 25 fi 26 27 if [ $error_num -eq $Error ] 28 then 29 #如果达到报警次数就发报警并跳出循环检查下一个端口 30 error_message="$DT $Host $Port error,please check" 31 [发报警] 32 break 33 fi 34 done 35 done < /home/www/check_port/host.conf
之前本来是想通过检查nginx的后端机器写的...后来想想如果别的机器也要添加报警....所以就给改成了配置文件格式.
检测方式使用的是shell命令nc -w是超时时间...-n是不使用dns解析 -z可以写单个端口也可以写端口范围 比如 21-24