免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7181 | 回复: 7
打印 上一主题 下一主题

一个刚刚编写的监控主机是否可以ping通的脚本  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-01-20 14:10 |只看该作者 |倒序浏览
初学shell,一个刚刚编写的监控主机是否可以ping通的脚本,如果某个主机ping不通,发出邮件,并记录,如果再次能ping通,再次发出邮件,通知,并可设置声音报警。

  1. #!/bin/sh
  2. # set -x
  3. #######################################################
  4. PingConf='/opt/monitor/Iptest'
  5. PingCantrech='/opt/monitor/IpcannotReach'
  6. #File where the log will be stored
  7. LogDir='/opt/monitor/Log'
  8. #Define the interval time
  9. INTERVAL='10'
  10. #Define the alarm process
  11. User1='xiaoli'
  12. User2='xiaozhang'
  13. YouNeed='/opt/monitor/YouNeed'
  14. ########################################################
  15. proc_alarm()
  16. {
  17.    while read IpAddress
  18.     do
  19.      #ingore any hash signs
  20.       case $IpAddress in
  21.        \#*)
  22.         ;;
  23.         *)
  24.         ping $IpAddress -c 5 >errtmp
  25.         if [ $? = 0 ] ; then
  26.                rm errtmp
  27.         else
  28.                rm errtmp
  29.                ErrTime=`date +%Y/%m/%d/%H:%M:%S`
  30.                echo "$ErrTime"": ""$IpAddress"" cann't be connected">>$LogDir
  31.                echo "$IpAddress">>tmp11
  32.                sleep 1
  33.                mail  -s "$IpAddress"_Can_not_reach  xiaoli@abced.com </dev/null
  34.                 echo "from $User1"": ""from $User2" >$YouNeed
  35.                 echo "$ErrTime"": ""$IpAddress"" off " >>$YouNeed
  36.                 audioplay -v 50 -p speaker /opt/monitor/space.au
  37.         fi
  38.         ;;
  39.       esac  
  40.     done < $PingConf
  41.   }

  42. ##########################################################
  43. proc_unalarm()
  44. {
  45.    while read IpAddress
  46.     do
  47.      #ingore any hash signs
  48.       case $IpAddress in
  49.        \#*)
  50.         ;;
  51.         *)
  52.         ping $IpAddress -c 5 >errtmp
  53.         if [ $? = 0 ] ; then
  54.                rm errtmp
  55.                ErrTime=`date +%Y/%m/%d/%H:%M:%S`
  56.                echo "$ErrTime"": ""$IpAddress"" can be connected">>$LogDir
  57.                sleep 1
  58.                mail  -s "$IpAddress"_OK_le  xiaoli@abced.com </dev/null
  59.                 echo "from $User1"": ""from $User2" >$YouNeed
  60.                 echo "$ErrTime"": ""$IpAddress"" on " >>$YouNeed
  61.                echo  $IpAddress >>tmp12
  62. #              audioplay -v 50 -p speaker /opt/monitor/space1.au
  63.         else
  64.                rm errtmp
  65.         fi
  66.         ;;
  67.       esac
  68.     done < $PingCantrech
  69.   }
  70. ##########################################################
  71. # execute the proc_main function every the specified time INTERVAL
  72.      uniq $PingCantrech > tmp17
  73.      cat tmp17 >$PingCantrech
  74.      rm tmp17
  75.      if [ -e $PingCantrech ]
  76.         then
  77.           proc_unalarm
  78.         else
  79.           echo "$PingCantrech" is null
  80.      fi
  81. while [ "1" -eq "1" ]
  82. do
  83.     # execute the proc_main function
  84. ##########################
  85.      proc_alarm
  86. ##########################
  87.     if [ -e tmp11 ]
  88.     then
  89.        echo  "$MYFILE" is nomal
  90.        if [ -e "$PingCantrech" ]
  91.           then
  92.               echo  "$PingCantrech" is nomal
  93.               cat tmp11 >>$PingCantrech
  94.               uniq $PingCantrech > tmp18            
  95.               cat tmp18  >$PingCantrech
  96.               rm tmp18
  97.               proc_unalarm
  98.               cat tmp11 >$PingCantrech
  99.           else
  100.               cat  tmp11 >$PingCantrech
  101.               proc_unalarm
  102.        fi  
  103.        rm tmp11
  104.        MYFILE='tmp12'
  105.        if [ -e "$MYFILE" ]
  106.           then
  107.              comm -23 $PingCantrech  tmp12 >tmp13
  108.              rm tmp12
  109.              cat tmp13 >$PingCantrech
  110.              rm tmp13
  111.           else
  112.              echo  "$MYFILE" is null
  113.              cat tmp11 >$PingCantrech
  114.        fi
  115.     elif
  116.        echo  "$MYFILE" is null
  117.     then
  118.        echo  "$MYFILE" is null              
  119.        if [ -e "$PingCantrech" ]
  120.        then
  121.           proc_unalarm
  122.        else
  123.           echo  "$MYFILE" is null         
  124.        fi
  125.     fi
  126. ######################################   
  127.   # suspend execution  for INTERVAL seconds
  128.      sleep $INTERVAL
  129. done
复制代码

论坛徽章:
0
2 [报告]
发表于 2004-01-20 15:27 |只看该作者

一个刚刚编写的监控主机是否可以ping通的脚本

强!

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
3 [报告]
发表于 2004-01-20 15:32 |只看该作者

一个刚刚编写的监控主机是否可以ping通的脚本

支持
就是临时文件过多,建议精简一下。

论坛徽章:
0
4 [报告]
发表于 2004-01-20 16:37 |只看该作者

一个刚刚编写的监控主机是否可以ping通的脚本

谢谢鼓励,我虚心接受,更改之:)

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
5 [报告]
发表于 2004-01-20 22:20 |只看该作者

一个刚刚编写的监控主机是否可以ping通的脚本

看看网斑竹的这一篇,特别是其中关于return value的部分,等网斑竹的第12问出炉后,或许对你更有所帮助。十三问中可有不少宝藏啊。
http://bbs.chinaunix.net/forum/viewtopic.php?p=1634118#1634118
加油啊!改好了给你加精华戳子!

论坛徽章:
0
6 [报告]
发表于 2004-01-30 15:11 |只看该作者

一个刚刚编写的监控主机是否可以ping通的脚本

原帖由 "Dalek"]ngCantrech"  发表:

       then
          proc_unalarm
       else
          echo  "$MYFILE" is null         
       fi
    fi
######################################   
  # suspend execution  for I..........



当ping无法ping通时程序会停止不前。。。请问有办法解决吗?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2004-01-31 02:37 |只看该作者

一个刚刚编写的监控主机是否可以ping通的脚本

[quote]原帖由 "ebfm"]当ping无法ping通时程序会停止不前。。。请问有办法解决吗?[/quote 发表:

若你用 linux ,可試:
  1. ping -w1 1.2.3.4
复制代码

-w1 就是 1 秒為限之意...

论坛徽章:
0
8 [报告]
发表于 2006-03-24 00:32 |只看该作者
也试写了一个。。。。。

  1. mping ()
  2. {
  3.         [ $# -lt 1 ] && return -1
  4.         var=$1
  5.         status=0
  6.         if [ -e "$var" ]; then
  7.                 for ip in `cat $var`
  8.                 do
  9.                         isip $ip
  10.                         if [ $? -eq 0 ]; then
  11.                                 sudo ping -c 1 -l 1 -w 1 $ip > /dev/null 2>&1
  12.                                 res=$?
  13.                                 [ $res -eq 0 ] && echo -e "${ip}\t\t\t[ OK ]" || echo -e "${ip}\t\t\t[ No ]"
  14.                                 status=`expr $res + $status`
  15.                         fi
  16.                 done
  17.                 return $status
  18.                #status 用来保存几个IP不通
  19.         else
  20.                 isip $var
  21.                 if [ $? -eq 0 ]; then
  22.                         sudo ping -c 1 -l 1 -w 1 $var > /dev/null 2>&1
  23.                         res=$?
  24.                         [ $res -eq 0 ] && echo -e "${var}\t\t\t[ OK ]" || echo -e "${var}\t\t\t[ No ]"
  25.                         return $res
  26.                 else
  27.                         return 1
  28.                 fi
  29.         fi
  30. }
复制代码

使用
mping mping_ip   # 从mping_ip文件中读ip来ping
mping 1.2.3.4 # 直接ping一个地址
当中的isip函数  自己写以下就可以运行了 这里也给个现成的

  1. isip()
  2. {
  3.         if [ $# -lt 1 ];  then
  4. #       echo "Need more arguments:$# Now exit"
  5.                 return 1
  6.         fi
  7.         echo $1 | grep -oq "^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$"
  8.         [ $? -eq 0 ] && echo $1 | awk -F. '{
  9.         if( $1>=0 && $1<=255 &&
  10.             $2>=0 && $2<=255 &&
  11.             $3>=0 && $3<=255 &&
  12.             $4>=0 && $4<=255)
  13.                 exit 0;
  14.         else
  15.                 exit 1;
  16.         }'
  17.         return $?
  18. }

复制代码

[ 本帖最后由 juey 于 2006-3-24 00:50 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP