11

我需要一个 Bash(或纯 shell)脚本来放入一个 cronjob,每分钟检查一次 Internet 是否已启动。

我是这样做的:

#! /bin/sh

host1=google.com
host2=wikipedia.org
curr_date=`date +"%Y%m%d%H%M"`

echo -n "${curr_date};"
((ping -w5 -c3 $host1 || ping -w5 -c3 $host2) > /dev/null 2>&1) && 
echo "up" || (echo "down" && exit 1)

你会怎么做?您会 ping 哪些主机?

说明:

  • 互联网已启动”,我的意思是我的互联网连接。

  • 通过“ up-w ”,我的意思是有可用的连接(如果我们谈论的是 DNS 关闭或连接真的很慢 [注意超时],这并不重要)。这也是为什么我没有包含任何 IP 而只包含主机的原因。

我还应该 ping Stack Overflow 吗?我的意思是,如果我无法访问 Google、Wikipedia 或 Stack Overflow,我就不想上网 :p

4

3 回答 3

6

那似乎是一个很好的解决方案。只需添加更多主机,也许还有一些纯 IP 主机,这样您就不必依赖 DNS 功能(这本身取决于您对“up”的定义)。

于 2010-05-27T15:07:03.060 回答
4

感谢您的代码,效果很好,实际上我只留下了一行:

((ping -w5 -c3 8.8.8.8 || ping -w5 -c3 4.2.2.1) > /dev/null 2>&1) && echo "up" || (echo "down" && exit 1)
于 2013-05-03T10:48:03.907 回答
1

您要检查 Internet 连接的哪一部分?DHCP?域名系统?物理上插入插孔?内核识别网卡的存在?

您可以使用该host(1)命令手动查询您的 ISP 的 DNS 服务器。这通常可以很好地表明您的路由器是否已失去与 ISP 的连接。

您可以使用netstat(8)或查询您的内核有哪些接口ifconfig(8)

您可以使用 获取有关界面的详细统计信息ifstat

于 2010-05-27T15:14:36.147 回答