“互联网连接检查单行”

Lan*_*nes 5 linux shell networking ping

有了这个,我可以检查是否有“互联网连接”。如果没有“互联网连接”(成功 ping 到这 2 个地方),则等待 600 秒,然后继续运行:

ping -W 1 -c 4 www.google.com >& /dev/null && ping -W 1 -c 4 www.yahoo.com >& /dev/null || sleep 600
Run Code Online (Sandbox Code Playgroud)

但是:我怎么能重写这一行,让它循环直到有互联网连接?

Gil*_*il' 7

while ! ping -W 1 -c 4 www.google.com >& /dev/null ||
      ! ping -W 1 -c 4 www.yahoo.com >& /dev/null; do
  sleep 600
done
Run Code Online (Sandbox Code Playgroud)

虽然我只是测试与 IP 地址的连接性;8.8.8.8 是 Google 的公共 DNS 服务器(它具有非常高的可用性)。无论如何测试 DNS 是否工作是不可靠的,因为条目可能在缓存中。

while ! ping -W 1 -c 1 8.8.8.8 >&/dev/null; do sleep 600; done
Run Code Online (Sandbox Code Playgroud)

Ping 并不总是检查互联网连接的最佳方式。许多地方(尤其是企业网络)会阻止除 Web 访问之外的所有内容。您可以通过从高可用性服务器下载文件来测试 Web 是否正常工作。这也测试了 DNS,至少从 HTTP 代理的角度来看(这通常也是重要的)。

while ! wget -q -O /dev/null --no-cache http://www.google.com/; do sleep 6000; done
Run Code Online (Sandbox Code Playgroud)