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

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

即使网络关闭,我的 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 不会继续尝试,直到网络再次启动为止,就像以前一样。

答案1

您可以在 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

答案2

如果AFAICTping无法打开接口上的套接字(因为接口已关闭),则它不会运行。如果您使用以下命令检查您的设备ip link show,您将看到哪些设备向上或者向下

首先尝试激活网络设备。

$ sudo ip link set <iface> up
$ ping -n 8.8.8.8

我已经在我的 Arch Linux 机器上测试了这个向下wifi接口,以及向上虚拟以太网(未分配 IP 地址)接口。ping前者的A退出,而后者则ping持续。

否则,使用networker的shell脚本。

答案3

您可以使用fping它的-l-I选项,而不是ping.这需要知道接口的名称,并以 root 身份运行:

root@here:~# fping -l -I wlan0 -n 8.8.8.8

me@here:~$ sudo fping -l -I eth0 -n 8.8.8.8

相关内容