天天看点

生产环境Shell脚本Ping监控主机是否存活(多种方法)

在网上针对shell脚本ping监控主机是否存活的文档很多,但大多都是ping一次就决定了状态,误报率会很高,为了精确判断,ping三次不通再发告警,只要一次ping通则正常。于是,今天中午抽出点时间总结了下面脚本。

脚本功能:通过Ping命令监控主机是否存活,如果ping失败则继续ping,三次不通就认为主机宕机或网络有问题,这时就可以发送邮件告警了。

方法1:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<code>#!/bin/bash</code>

<code># blog:http://lizhenliang.blog.51cto.com</code>

<code> </code> 

<code>IP_LIST=</code><code>"192.168.18.1 192.168.1.1 192.168.18.2"</code>

<code>for</code> <code>IP </code><code>in</code> <code>$IP_LIST; </code><code>do</code>

<code>    </code><code>NUM=1</code>

<code>    </code><code>while</code> <code>[ $NUM -</code><code>le</code> <code>3 ]; </code><code>do</code>

<code>        </code><code>if</code> <code>ping</code> <code>-c 1 $IP &gt; </code><code>/dev/null</code><code>; </code><code>then</code>

<code>            </code><code>echo</code> <code>"$IP Ping is successful."</code>

<code>            </code><code>break</code>

<code>        </code><code>else</code>

<code>            </code><code># echo "$IP Ping is failure $NUM"</code>

<code>            </code><code>FAIL_COUNT[$NUM]=$IP</code>

<code>            </code><code>let</code> <code>NUM++</code>

<code>        </code><code>fi</code>

<code>    </code><code>done</code>

<code>    </code><code>if</code> <code>[ ${</code><code>#FAIL_COUNT[*]} -eq 3 ];then</code>

<code>        </code><code>echo</code> <code>"${FAIL_COUNT[1]} Ping is failure!"</code>

<code>        </code><code>unset</code> <code>FAIL_COUNT[*]</code>

<code>    </code><code>fi</code>

<code>done</code>

说明:将错误IP放到数组里面判断是否ping失败三次

方法2:

<code>    </code><code>FAIL_COUNT=0</code>

<code>    </code><code>for</code> <code>((i=1;i&lt;=3;i++)); </code><code>do</code>

<code>        </code><code>if</code> <code>ping</code> <code>-c 1 $IP &gt;</code><code>/dev/null</code><code>; </code><code>then</code>

<code>            </code><code># echo "$IP Ping is failure $i"</code>

<code>            </code><code>let</code> <code>FAIL_COUNT++</code>

<code>    </code><code>if</code> <code>[ $FAIL_COUNT -</code><code>eq</code> <code>3 ]; </code><code>then</code>

<code>        </code><code>echo</code> <code>"$IP Ping is failure!"</code>

说明:将错误次数放到FAIL_COUNT变量里面判断是否ping失败三次

方法3:

<code>ping_success_status() {</code>

<code>    </code><code>if</code> <code>ping</code> <code>-c 1 $IP &gt;</code><code>/dev/null</code><code>; </code><code>then</code>

<code>        </code><code>echo</code> <code>"$IP Ping is successful."</code>

<code>        </code><code>continue</code>

<code>}</code>

<code>    </code><code>ping_success_status</code>

<code>    </code><code>echo</code> <code>"$IP Ping is failure!"</code>

说明:这个个人觉得比较巧妙,利用for循环将ping通就跳出循环继续,如果不跳出就会走到打印ping失败

本文转自 李振良OK 51CTO博客,原文链接:http://blog.51cto.com/lizhenliang/1736770,如需转载请自行联系原作者