![当主机出现时,为什么 `ping -c 1 -W 1800 somehost` 没有成功?](https://linux22.com/image/166560/%E5%BD%93%E4%B8%BB%E6%9C%BA%E5%87%BA%E7%8E%B0%E6%97%B6%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%20%60ping%20-c%201%20-W%201800%20somehost%60%20%E6%B2%A1%E6%9C%89%E6%88%90%E5%8A%9F%EF%BC%9F.png)
我试图通过执行以下命令来检测主机何时从重新启动中恢复:
ping -c 1 -W 1800 myhost
我希望在 30 分钟之前主机能够成功 ping 通,并且在我的脚本中我可以像ssh
主机一样采取一些操作。但主机确实在 30 分钟过去之前启动,我可以通过ping myhost
从命令行手动运行来验证这一点,但ping -c 1 -W 1800 myhost
没有成功。它只是超时了。
我的操作系统是:
$ uname -a
Linux dev-001 3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 15 17:36:42 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
答案1
您的命令表示发送一个数据包 ( -c 1
) 并等待最多 30 分钟以获得回复 ( -W 1800
)。
由于主机在您发送单个数据包时可能已关闭,因此它不太可能发送响应,因此需要ping
等待,直到达到截止日期并返回失败。
不幸的是,没有简单的方法可以“ping
直到成功”,因此您必须用循环来综合它。此等待时间长达 1800 秒,每五秒发送一次 ping。
end=$(($(date +%s) + 1800))
while [[ $(date +%s) -lt $end ]]
do
ping -c 1 -i 5 -w 30 -q myhost && break
done