生产环境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
#!/bin/bash
# blog:http://lizhenliang.blog.51cto.com
  
IP_LIST= "192.168.18.1 192.168.1.1 192.168.18.2"
for  IP  in  $IP_LIST;  do
     NUM=1
     while  [ $NUM - le  3 ];  do
         if  ping  -c 1 $IP >  /dev/null then
             echo  "$IP Ping is successful."
             break
         else
             # echo "$IP Ping is failure $NUM"
             FAIL_COUNT[$NUM]=$IP
             let  NUM++
         fi
     done
     if  [ ${ #FAIL_COUNT[*]} -eq 3 ];then
         echo  "${FAIL_COUNT[1]} Ping is failure!"
         unset  FAIL_COUNT[*]
     fi
done

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

方法2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
# blog:http://lizhenliang.blog.51cto.com
  
IP_LIST= "192.168.18.1 192.168.1.1 192.168.18.2"
for  IP  in  $IP_LIST;  do
     FAIL_COUNT=0
     for  ((i=1;i<=3;i++));  do
         if  ping  -c 1 $IP > /dev/null then
             echo  "$IP Ping is successful."
             break
         else
             # echo "$IP Ping is failure $i"
             let  FAIL_COUNT++
         fi
     done
     if  [ $FAIL_COUNT - eq  3 ];  then
         echo  "$IP Ping is failure!"
     fi
done

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

方法3:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
# blog:http://lizhenliang.blog.51cto.com
  
ping_success_status() {
     if  ping  -c 1 $IP > /dev/null then
         echo  "$IP Ping is successful."
         continue
     fi
}
IP_LIST= "192.168.18.1 192.168.1.1 192.168.18.2"
for  IP  in  $IP_LIST;  do
     ping_success_status
     ping_success_status
     ping_success_status
     echo  "$IP Ping is failure!"
done

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



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

相关文章
|
14天前
|
Shell
Shell脚本有哪些基本语法?
【9月更文挑战第4天】
35 17
|
14天前
|
存储 Unix Shell
shell脚本编程基础
【9月更文挑战第4天】
27 12
|
13天前
|
网络协议 关系型数据库 MySQL
Shell 脚本案例
Shell 脚本案例
27 8
|
13天前
|
Shell Linux 开发工具
linux shell 脚本调试技巧
【9月更文挑战第3天】在Linux中调试shell脚本可采用多种技巧:使用`-x`选项显示每行命令及变量扩展情况;通过`read`或`trap`设置断点;利用`echo`检查变量值,`set`显示所有变量;检查退出状态码 `$?` 进行错误处理;使用`bashdb`等调试工具实现更复杂调试功能。
|
29天前
|
Ubuntu Linux Shell
在Linux中,如何使用shell脚本判断某个服务是否正在运行?
在Linux中,如何使用shell脚本判断某个服务是否正在运行?
|
29天前
|
Shell Linux 网络安全
在Linux中,如何利用Shell把10台主机的当前时间写到一个文件里边?
在Linux中,如何利用Shell把10台主机的当前时间写到一个文件里边?
|
27天前
|
Java Shell Linux
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
关于如何使用Shell脚本来解析Linux系统中的应用服务日志,提供了脚本实现的详细步骤和技巧,以及一些Shell编程的技能扩展。
22 0
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
|
28天前
|
监控 Shell Linux
在Linux中,如何使用shell脚本进行系统监控和报告?
在Linux中,如何使用shell脚本进行系统监控和报告?
|
29天前
|
Shell Linux
在Linux中,shell脚本中的条件语句和循环结构是什么?
在Linux中,shell脚本中的条件语句和循环结构是什么?
|
29天前
|
关系型数据库 MySQL Shell
MySQL回滚脚本: 误操作delete binlog回滚shell脚本
MySQL回滚脚本: 误操作delete binlog回滚shell脚本