代码之家  ›  专栏  ›  技术社区  ›  João Portela

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

  •  10
  • João Portela  · 技术社区  · 16 年前

    我需要一个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)
    

    你会怎么做?你要找哪位主人?

    澄清:

    • 被“ 互联网正在上升 “我是说 我的 互联网连接。

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

    我还应该ping堆栈溢出吗?我的意思是,如果我不能访问谷歌、维基百科或栈溢出,我就不想上网:p

    3 回复  |  直到 12 年前
        1
  •  5
  •   Emil Vikström    16 年前

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

        2
  •  4
  •   Radamanf    13 年前

    感谢您的代码,它工作得很好,实际上我只留下了一行:

    ((ping -w5 -c3 8.8.8.8 || ping -w5 -c3 4.2.2.1) > /dev/null 2>&1) && echo "up" || (echo "down" && exit 1)
    
        3
  •  1
  •   amphetamachine    16 年前

    您希望检查互联网连接的哪一部分?DHCP?域名服务器?身体上被插入了插孔?内核是否识别NIC的存在?

    您可以使用 host(1) 命令。这通常是一个很好的指示,表明您的路由器是否已失去与ISP的连接。

    您可以使用 netstat(8) ifconfig(8) .

    您可以使用 ifstat .