有什么方法可以在网络无法访问时启动(重复)ping?

Modified on: Sat, 30 Jun 2018 09:51:00 +0800

我的ping命令(在Debian 6或7上)将反复尝试ping服务器,即使网络已关闭,如果网络启动时已启动。有没有办法在网络关闭时启动ping并获得相同的行为?

这是一个例子。如果我在网络启动时开始重复ping,并且在ping运行时,网络关闭,则ping继续重复。如果网络重新启动,它将继续ping:

me@here:~$ ping -n 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=46 time=117 ms
...
64 bytes from 8.8.8.8: icmp_req=6 ttl=46 time=116 ms
ping: sendmsg: Network is unreachable
...
ping: sendmsg: Network is unreachable
64 bytes from 8.8.8.8: icmp_req=108 ttl=46 time=694 ms
...

但是,如果我运行ping时网络已关闭:

me@here:~$ ping -n 8.8.8.8
connect: Network is unreachable
me@here:~$

这是一个无法访问的网络问题,但ping不再继续尝试,直到网络再次启动,就像以前一样。

最佳答案

您可以在shell脚本中使用while循环:

failed=1 # any number not equal to zero
while [ $failed -ne 0 ]
do
   ping -n 8.8.8.8
   failed=$?
done
# after the  $? becomes "0" it will get out of the while loop
echo "ping succeeded"

要停止继续打印connect: Network is unreachable消息,您可以使用ping编辑该行,如下所示:

ping -n 8.8.8.8 2> /dev/null

或者您可以在循环中添加sleep以减少这些消息的数量。

脚本可以简化为

while ! ping -n 8.8.8.8
do
    sleep 1
done

这可以让它写成一行:

while ! ping -n 8.8.8.8; do sleep 1; done

相关问答

添加新评论