生产环境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/nullthen

            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/nullthen

            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/nullthen

        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失败

时间: 2024-10-30 12:32:45

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

Shell脚本Ping监控主机是否存活并发邮件报警(三种方法)

#前提已经可以通过mail或mutt客户端发邮件 1.先安装sendmail来发邮件 1 2 3   # yum -y install sendmail   # /etc/init.d/sendmail start   # chkconfig sendmail on 2.再安装邮件客户端 1    # yum -y install mutt   2.1 为了更好在邮件中显示,设置mutt客户端发送信息 1 2 3 4 5 6 7   # vim /etc/Muttrc   set charset

Shell脚本中获取进程ID的方法

 这篇文章主要介绍了Shell脚本中获取进程ID的方法,我想要知道运行中脚本子shell的进程id,我该如何在shell脚本中得到PID,阅读本文即可找到你想要答案,需要的朋友可以参考下     提问: 我想要知道运行中脚本子shell的进程id.我该如何在shell脚本中得到PID. 当我在执行shell脚本时,它会启动一个叫子shell的进程.作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为"批处理进程"). 在某些情况下,你也许想要知道运行中

Shell脚本传递参数的3种方法比较

  这篇文章主要介绍了Shell脚本传递参数的3种方法比较,本文直接给出代码示例,在代码中包含详细注解,需要的朋友可以参考下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65

Linux Shell脚本Ldd命令原理及使用方法

1.首先ldd不是一个可执行程序,而只是一个shell脚本2.ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量如下:LD_TRACE_LOADED_OBJECTS.LD_WARN.LD_BIND_NOW.LD_LIBRARY_VERSION. LD_VERBOSE等.当LD_TRACE_LOADED_OBJECTS环境变量不为空时,任何可执行程序在运行时,它都会只显示模块的 dependency,而程序并不真正执行.要不你可以在shell终端测试一下,如下:(1)

Shell脚本传递参数的3种方法比较_linux shell

#!/bin/bash #extracting command text_text_text_line options as parameters help_info(){ echo "NAME" echo "\t$0" echo "SYNOPSIS" echo "\t$0 is a shell test about process options" echo "DESCRIPTION" echo &quo

Shell脚本中获取进程ID的方法_linux shell

提问: 我想要知道运行中脚本子shell的进程id.我该如何在shell脚本中得到PID. 当我在执行shell脚本时,它会启动一个叫子shell的进程.作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为"批处理进程"). 在某些情况下,你也许想要知道运行中的子shell的PID.这个PID信息可以在不同的情况下使用.比如,你可以使用shell脚本的PID在/tmp下创建一个唯一的临时文件.有时侯脚本需要检测所有运行的进程,它可以从进程列表中排除自身

在Linux的系统Shell脚本中使用if语句的方法

  Bourne Shell 的 if 语句和大部分编程语言一样 - 检测条件是否真实,如果条件为真,shell 会执行这个 if 语句指定的代码块,如果条件为假,shell 就会跳过 if 代码块,继续执行之后的代码. if 语句的语法: 代码如下: if [ 判断条件 ] then command1 command2 --.. last_command fi Example: #!/bin/bash number=150 if [ $number -eq 150 ] then echo "N

Linux Shell脚本之Atlassian confluence远程备份方法

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1686013 注:Atlassian confluence是一个较专业的wiki程序,由java语言写成,其详细介绍可以Google it(一点美中不足,java占用内存还是比较大的). 该脚本的设计思路是根据Atlassian confluence官方提供的文档说明写的,主要是备份一些配置文件,上传的一些附件之类的

Shell脚本中让进程休眠的方法(sleep用法)_linux shell

有时候写Shell的脚本,用于顺序执行一系列的程序. 有些程序在停止之后并没能立即退出,就例如有一个 tomcat 挂了,就算是用 kill -9 命令也还没瞬间就结束掉. 这么如果 shell 还没等其退出就接着执行下一行,这么就出乱子了. 刚知道了原来 shell 也能有 sleep 的参数. 复制代码 代码如下: sleep 1 睡眠1秒 sleep 1s 睡眠1秒 sleep 1m 睡眠1分 sleep 1h 睡眠1小时 用法如下,例如重启tomcat: 复制代码 代码如下: #!/bi