有没有一种简单的方法可以从控制台检查 Internet 连接?我正在尝试使用 shell 脚本。我似乎有一个想法是检查 HTTP 响应代码以解释 Internet 连接是否正常工作。但我认为一定有一种简单的方法,而不需要检查一个从不崩溃的网站 ;)wget --spider http://www.google.co.in/
编辑:似乎有很多因素可以单独检查,这是好事。我目前的目的是检查我的博客是否已关闭。我已经设置了 cron 来每分钟检查一次。为此,我正在检查 wget --spider 对我的博客的 HTTP 响应代码。如果不是 200,它会通知我(我相信这比直接 ping 它要好,因为该网站可能负载过重,可能会超时或响应很晚)。昨天,我的互联网出现了一些问题。LAN 连接正常,但我无法访问任何网站。因此,我不断收到通知,因为脚本在 wget 响应中找不到 200。现在我想确保当我有互联网连接时它会向我显示通知。
因此,检查 DNS 和 LAN 连接对我来说有点过头了,因为我没有那么多具体的需求来找出问题所在。那么你建议我怎么做呢?
以下是我用来持续检查博客停机时间的脚本:
#!/bin/bash
# Sending the output of the wget in a variable and not what wget fetches
RESULT=`wget --spider http://blog.ashfame.com 2>&1`
FLAG=0
# Traverse the string considering it as an array of words
for x in $RESULT; do
if [ "$x" = '200' ]; then
FLAG=1 # This means all good
fi
done
if [ $FLAG -eq '0' ]; then
# A good point is to check if the internet is working or not
# Check if we have internet connectivity by some other site
RESULT=`wget --spider http://www.facebook.com 2>&1`
for x in $RESULT; do
if [ "$x" = '200' ]; then
FLAG=1 # This means we do have internet connectivity and the blog is actually down
fi
done
if [ $FLAG -eq '1' ]; then
DISPLAY=:0 notify-send -t 2000 -i /home/ashfame/Dropbox/Ubuntu/icons/network-idle.png "Downtime Alert!" "http://blog.ashfame.com/ is down."
fi
fi
exit
这样,我只需要在我的博客响应代码出现问题时检查互联网连接。这有点繁重(因为我没有使用 ping),但应该不会产生任何误报。对吗?此外,我如何才能每次随机 ping 到不同的网站,如 facebook、google、yahoo 等。此外(我试图避免任何 I/O)我可以写入日志文件,通过它我可以检查停机检查的次数,然后跳过进一步的检查,直到网站停机或进行更长时间的检查(10 分钟而不是每分钟)。你怎么看?
答案1
检查特定网站是否正常运行
首先,有多种良好的在线监控服务可供选择。Pingdom 提供免费帐户,用于监控一个目标。(免责声明:我是不是与 Pingdom 有任何关联)。
其次,使用wget --spider
您自己的脚本是个好主意。当您的计算机关闭或 DNS 服务器不工作时,您会得到一些误报。检查返回代码是实现此目的的直接方法:
wget --spider --quiet http://example.com
if [ "$?" != 0 ]; then
echo "Website failed!" | mail -s "Website down" [email protected]
fi
然而,这种方法也有缺点。如果您的提供商缓存了您的 DNS 记录,但 DNS 服务器已关闭,其他人将无法访问您的网站,即使监控显示一切正常。您可以使用 编写简短的解决方法host
,例如host example.com <your dns server IP>
。如果 DNS 服务器没有响应,即使 OpenDNS 或您自己的提供商的 DNS 服务器工作正常,它也会返回错误。
检查互联网是否正常工作
在每种情况下,并没有简单的方法来处理这个问题。
例如,您可以ping -c1
在多个知名网站(例如 www.google.com、facebook.com 和 ping.funet.fi)上运行并检查返回代码以确定是否可以到达任何目的地。您可以使用变量自动检查返回代码$?
。参数-c1
将 ping 数据包的数量限制为一个。
当登录网关重定向所有 ping 和 HTTP 请求时,您可能会遇到一些公共 wifi 问题。如果是这样,即使您无法访问任何其他网站,您也可能会收到 ping 响应和非错误 HTTP 状态代码。
如果你想检查电缆状态,你可以使用
sudo ethtool eth0
从输出(摘录):
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
Link detected: yes
但是,这并不能说明您是否真的有连接,只是电缆是否已连接,某物在另一端。
答案2
我刚刚用
nm-online
它会暂停,直到网络管理器显示网络连接。效果很好。你也可以用它做其他事情。
答案3
我正在使用这个方法...
如果 [[ "$(ping -c 1 8.8.8.8 | grep '100% 数据包丢失' )" != "" ]]; 然后 echo“互联网不存在” 出口 1 别的 echo“互联网存在” wget www.site.com 菲
答案4
这是我用来测试互联网连接的 shell 脚本:
报警器
#! /bin/bash
if curl --silent --head http://www.google.com/ |
egrep "20[0-9] Found|30[0-9] Found" >/dev/null
then
echo Internet status: OK
else
echo Internet status: ERROR
mpg321 alarm.mp3 &> /dev/null
fi
sleep 60
clear
./alarm.sh
您需要安装 curl 和 mpg321
sudo apt-get install curl mpg321
如果您想要声音警报功能,则需要在同一文件夹中将 .mp3 声音文件重命名为 alarm.mp3。最后根据您的需要配置网站 URL 和 egrep。