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的後端機器寫的...後來想一想若是別的機器也要添加報警....因此就給改爲了配置文件格式.nginx
檢測方式使用的是shell命令nc -w是超時時間...-n是不使用dns解析 -z能夠寫單個端口也能夠寫端口範圍 好比 21-24shell