Bash脚本(或多或少)可靠地检查Internet是否已启动

时间:2010-05-27 15:02:38

标签: linux shell internet-connection

我需要一个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 ”,我的意思是拥有可用的连接(如果我们谈论DNS正在关闭或连接真的很慢,那真的不重要[请注意{ {1}}暂停])。这也是我没有包含任何IP而只包含主机的原因。

我还应该ping Stack Overflow吗?我的意思是,如果我无法访问谷歌,维基百科或Stack Overflow,我不想要互联网:p

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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)

答案 2 :(得分:1)

您希望查看哪部分互联网连接? DHCP? DNS?物理上插入插孔?内核是否识别出NIC?

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

您可以使用netstat(8)ifconfig(8)来查询内核的界面。

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