1. #!/bin/sh  
  2. LANG=C  
  3. #被监控服务器、端口列表  
  4. server_all_list=(\  
  5. **.**.**.**:22 \  
  6. **.**.**.**:80 \  
  7. **.**.**.**:25 \  
  8.  
  9. date=$(date -d "today" +"%Y-%m-%d_%H:%M:%S"
  10.  
  11. server_all_len=${#server_all_list[*]}  
  12. i=0 
  13.  
  14. while  [ $i -lt $server_all_len ]  
  15. do  
  16.    server_ip=$(echo ${server_all_list[$i]} | awk -F ':' '{print $1}')  
  17.    server_port=$(echo ${server_all_list[$i]} | awk -F ':' '{print $2}')  
  18.     is_send_msg=0 
  19.  
  20.    if nc -vv -z -w 3 $server_ip $server_port > /dev/null 2>&1  
  21.    then  
  22.        #status:    0,http down    1,http ok    2,http down but ping ok  
  23.        status=1  
  24.        echo "服务器${server_ip},端口${server_port}能够正常访问!"  
  25.    else  
  26.        if nc -vv -z -w 10 $server_ip $server_port > /dev/null 2>&1  
  27.        then  
  28.            status=1  
  29.            echo "服务器${server_ip},端口${server_port}能够正常访问!"  
  30.              else  
  31.            if ping -c 1 $server_ip > /dev/null 2>&1  
  32.         then  
  33.                status=2  
  34.                echo "服务器${server_ip},端口${server_port}无法访问,但是能够Ping通!"  
  35.                  message="服务器无法访问,但是能ping通"  
  36.                  is_send_msg=1  
  37.            else  
  38.                status=0x  
  39.            echo "服务器${server_ip},端口${server_port}无法访问,并且无法Ping通!"  
  40.                 message="无法访问,并且无法ping"  
  41.                 is_send_msg=1  
  42.                 
  43.            fi  
  44.         fi    
  45.           if is_send_msg=1  
  46.           then  
  47.          echo "报警服务器:${server_ip} 报警内容: $message 时间:$date " | mutt -s "服务器监控" ***********@139.com ***********@139.com  
  48.               else  
  49.                         echo "一切正常,无须发送报警消息!\n"  
  50.       fi  
  51.     fi  
  52.   let i++  
  53. done