即使网络关闭,我的 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