如何在 ping 完成时运行任意命令?

如何在 ping 完成时运行任意命令?

我如何构造一个命令来每分钟或每隔一定时间 ping 一个主机,然后在它不超时时(当被 ping 的主机上线时)运行一个命令?

基本上我想要以下伪代码:

bool ping = pingHost();
while (ping = false) {
    //try again
    ping = pingHost();
}
runCommand("whatever");

最好的情况下,答案应该包括针对类 UNIX 系统(使用 bash 等)以及 Windows 系统(cmd、PowerShell 或 Cygwin 均可)的说明。

答案1

首先,请允许我指出,您可能希望使用更完整的监控软件,例如纳吉奥斯为了这。

对于基本的脚本解决方案,在 Linux 上我将使用 Bash 来实现这一点:

#!/bin/bash
ping -c 1 yourhost.com
if [ $? -eq 0 ]; then
    your_command
fi

Windows 实际上非常类似。将其放入.bat文件中:

ping -n 1 yourhost.com
IF %ERRORLEVEL%==0 (
    your_command
)

解释:ping 命令在两个操作系统上都返回退出代码。在 Linux (Bash) 上,您可以使用变量$?来获取此退出代码,在 Windows 上则是%errorlevel%。当 ping 成功时,两个操作系统上的退出代码均为 0,否则为 1。此值可用于有条件地运行您的命令。

添加循环:

在 Linux 上:

#!/bin/bash
result=1
while [ $result -neq 0 ]; do
    ping -c 1 yourhost.com
    result=$?
done

在 Windows 上同样如此:

:loop
ping -n 1 yourhost.com
IF NOT %ERRORLEVEL%==0 (
    goto loop
)
your_command

评论:如果希望每次主机上线时都运行,可以使用Linux上的crontab或Windows上的Task Scheduler。如果希望每次主机上线时都运行,则需要合适的监控软件。

相关内容