我需要一个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
答案 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
获取有关界面的详细统计信息。