脚本自动ping检测网络状况

    在一个实际的集群中,可能有几十上百台服务器,每次本身检测集群健康状态时,一台服务器一台服务器检测,一个字母一个字母敲,我都累成狗 。鉴于此,写了一个小脚本,自动跑ping,减轻工做量,呀吼吼,爽歪歪。 跳跳  跳跳 
      For example..............
      This’s my test  environment..............
      cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.131 ceph-node1
192.168.200.130 ceph-node2
192.168.200.136 ceph-node3
解决思想(Trouble Shooting):提取这个文件中集群全部的ip地址造成一个单独的文件,在经过读取文件中的ip,自动跑ping...
两大难点:1.提取全部集群IP   2.读取文件中的ip

脚本以下:
#/bin/bash
cat /etc/hosts | grep -v 127 | grep -v :: | awk '{print $1}' >>  a.sh
while read line
do
     ping $line
done < a.sh

第一条提取全部的ip 统一放在a.sh中
下面所有是读取这里面的ip作ping.

缺点 :脚本能够考虑读取hosts文件中的IP,不须要在生成另外的ip地址文件在读取
           能够作作一个计数 ping_count ping几回自动跳转ping下一个ip。

           能够有更加人性话的交互,例如ping失败,会显示ping不一样的主机名或IP.node


改进:
#/bin/bash
cat /etc/hosts | grep -v 127 | grep -v :: | awk '{print $1}' >>  a.sh
while read line
do
     ping $line -c 3 | grep -q "ttl=" && echo "$line yes" || echo "$line no"
done < a.sh
经过修改do下面执行语句成功解决了上述第2.3问题,可是仍是发现了一个的bug,每ping一次,生成的ip地址文件中都会重复增长集群地址,致使作了n倍的重复性工做,应该将a.sh改为覆盖,而不是追加。bash


最终:
#/bin/bash
cat /etc/hosts | grep -v 127 | grep -v :: | awk '{print $1}' >  a.sh
while read line
do
     ping $line -c 3 | grep -q "ttl=" && echo "$line yes" || echo "$line no"
done < a.sh服务器

记录下本身写的第一个脚本的思考过程,哈哈哈哈哈
dom