为 ping 创建 bash 脚本

为 ping 创建 bash 脚本

晚上好,我需要一个 bash 脚本,该脚本遵循以下命令: ping -c 4 -i "IP"3 次。每次 ping 必须间隔 10 分钟执行,只有当 3 次都失败时,才会发送电子邮件。你可以帮帮我吗?

前任。

ping -c 4 -i X.X.X.X

执行类型:先ping,如果全部丢包,等待10分钟再次执行ping命令,如果还是失败再执行上次ping,如果失败则发送邮件

#!/bin/bash
HOSTS="X.X.X.X"

pingtest(){
  for myHost in "$@"
  do
    ping -c 4 -i 5 $HOSTS && return 1
  done
  return 0
}

if pingtest $HOSTS
then
  # 100% failed
  echo "Server failed" | mail -s "Server Down" [email protected]

fi

但如何重复3次并且只有在丢包失败后才发送电子邮件?谢谢

答案1

如果可以接受使用外部程序,您可以使用监控IP。它是用 C 语言编写的并且相当可配置。与循环并持续执行的 bash 脚本ping或 cron 作业不同,它每秒可以运行 100 次 ping,同时消耗的 CPU 时间不到 1%。

例如,您可以使用如下内容:

sudo ./monitor-ip --interval 5.0 --missed-max 20 --reset -- 1.2.3.4 \
        bash -c 'mail -s "Server Down!" [email protected] <<< "$MONITOR_NOTIFY_REMOTE_ADDRESS unreachable"'

1.2.3.4这将以5 秒的间隔发送 ping,直到未收到连续 20 个 pong(停机时间为 1 分钟),然后发送电子邮件至[电子邮件受保护]。它将继续以 1 分钟的间隔发送电子邮件,直到状态条件得到解决。

完全披露:我写的监控IP

答案2

以下是如何获取 ping 结果的示例:

#!/bin/bash

HOST="X.X.X.X"
WAITFOR=5
TIMES=3

ping $HOST -c $TIMES -i $WAITFOR &> /dev/null
pingReturn=$?

if [ $pingReturn -eq 0 ]; then
    # It works
    echo "Success!!!"
    exit 0
else
    # No access
    echo "Fail"
    exit 1
fi

您可以使用您的方法来发送电子邮件,而不是我放入的 echo 语句。您还有三个变量HOSTTIMESWAITFOR,您可以将它们设置为您想要的值。如果您希望两次 ping 之间间隔 10 分钟,则必须设置WAITFOR为 value 600

答案3

下面的脚本适用于以下场景

 #!/bin/bash
    echo "enter the hostname or IP of the host"
    read h
    ping -c1 $h
    if [ $? != 0 ]
    then
    sleep 6
    ping -c1 $h
    if [ $? != 0 ]
    then
    sleep 6
    ping -c1 $h
    if [ $? != 0 ]
    then
    echo "host $h is not pinging  and its not reachable"
    mail -s "host $h is not pinging  and its not reachable" emailid </dev/null
    else
    echo "host $h is pinging"
    fi
    fi
    fi

相关内容