Dan*_*etz 6 networking shell-script 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
...
Run Code Online (Sandbox Code Playgroud)
但是,如果运行 ping 时网络关闭:
me@here:~$ ping -n 8.8.8.8
connect: Network is unreachable
me@here:~$
Run Code Online (Sandbox Code Playgroud)
这与无法访问的网络问题相同,但 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"
Run Code Online (Sandbox Code Playgroud)
要停止打印connect: Network is unreachable
消息,您可以使用 ping 编辑该行,如下所示:
ping -n 8.8.8.8 2> /dev/null
Run Code Online (Sandbox Code Playgroud)
或者您可以sleep
在循环中添加一个以减少这些消息的数量。
脚本可以简化为
while ! ping -n 8.8.8.8
do
sleep 1
done
Run Code Online (Sandbox Code Playgroud)
这让它可以写在一行中:
while ! ping -n 8.8.8.8; do sleep 1; done
Run Code Online (Sandbox Code Playgroud)