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

Linux Bash脚本,用于(或多或少)可靠地检查Internet是否已启动,linux,shell,internet-connection,Linux,Shell,Internet Connection,我需要一个Bash(或纯shell)脚本来放入cronjob,它每分钟都会检查互联网是否正常 我就是这样做的: #! /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) && ech

我需要一个Bash(或纯shell)脚本来放入cronjob,它每分钟都会检查互联网是否正常

我就是这样做的:

#! /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)
你会怎么做?你会选择哪位主持人

澄清:

  • 我所说的“互联网开通”是指我的互联网连接

  • 所谓“向上”,我的意思是有可用的连接(如果我们谈论的是DNS关闭或者连接真的很慢[注意超时的
    -w
    ),这并不重要)。这也是为什么我没有包括任何IP,只包括主机


我也应该ping堆栈溢出吗?我的意思是,如果我不能访问Google、Wikipedia或Stack Overflow,我不想使用Internet:p

这似乎是一个很好的解决方案。只需再添加几台主机,或者添加一些纯IP主机,这样您就不必依赖DNS功能(这本身取决于您对“up”的定义)。

您希望检查Internet连接的哪一部分?DHCP?DNS?插在插座上?内核是否识别NIC的存在

您可以使用
host(1)
命令手动查询ISP的DNS服务器。这通常是路由器是否与ISP失去连接的良好指示

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


您可以使用
ifstat

获取有关该界面的详细统计信息。谢谢您的代码,它工作得很好,实际上我只留下了一行:

((ping -w5 -c3 8.8.8.8 || ping -w5 -c3 4.2.2.1) > /dev/null 2>&1) && echo "up" || (echo "down" && exit 1)

谷歌是我经常用来测试我是否有连接的工具。8.8.8.8也不错,特别是因为它是多播的。互联网作为一个整体通常是“向上”的。但是,您与它的连接可能不正确!;-)@约翰:当我说互联网接通时,我的意思是我的连接接通了,但你说得很对。:)如果我想知道互联网是否开通了,我会点击谷歌;)<代码>#/bin/sh不是Bash(即使
sh
符号链接到
Bash
)。实际上,依赖DNS功能可能是一件好事。如果您想检查实际的“我可以像正常一样浏览web”操作,那么需要DNS支持是一件好事(TM)。