我如何构造一个命令来每分钟或每隔一定时间 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。如果希望每次主机上线时都运行,则需要合适的监控软件。