在网上针对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 > </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<=3;i++)); </code><code>do</code>
<code> </code><code>if</code> <code>ping</code> <code>-c 1 $IP ></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 ></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,如需转载请自行联系原作者