如何捕获服务器 ping 的响应并发送警报

如何捕获服务器 ping 的响应并发送警报

我正在运行以下命令:

ping ldap.corp.XXXXX.com

LDAP 服务器启动:

Pinging ldapeu.corp.XXXXX.com [XX.XXX.XXX.XX] with 32 bytes of data:
Reply from XX.XXX.XXX.XX: bytes=32 time<1ms TTL=252

LDAP 服务器关闭:

ping: ldap.corp.XXXXX.com: Name or service not known

如何在 KSH 文件中实现代码来识别 LDAP 服务器何时关闭?

答案1

ping根据成功程度返回不同的退出代码。 ping 有多种实现,其行为可能略有不同,但引用自他们的联机帮助页之一

如果根本没有收到任何回复数据包,它将以代码 1 退出。如果数据包数数最后期限都指定了,并且少于数数数据包被接收到的时间最后期限已到达,它也会以代码 1 退出。出现其他错误时,它会以代码 2 退出。否则,它会以代码 0 退出。这使得可以使用退出代码来查看主机是否处于活动状态。

除了 0 表示成功和非零表示失败之外,您的 ping 可能会使用不同的值;您可以echo $?在运行后检查。

还有其他fping用于监视的 ping 程序(例如 )。

所以你可以做一些简单的事情:

if ping -c 2 ldapeu.corp.XXXXX.com ; then
    echo up
else
    echo down
fi

(您可以使用类似的方法if ping … >/dev/null 2>/dev/null; then来删除所有消息ping打印。)

答案2

您可以使用ping的退出值来了解主机是否已启动:

0 everything ok
1 no response or lost packages
2 other errors (unable to resolve is one of them)

因此,例如:

ping -c 5 hostname || error_script.sh

error_script.sh仅当出现问题时才会运行。

相关内容