Ash*_*ame 40 command-line networking internet
是否有一种简单的方法可以从控制台检查 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
Run Code Online (Sandbox Code Playgroud)
这样我只需要在我的博客响应代码有问题的地方检查互联网连接。它有点重(因为我没有使用 ping)但不应该给出任何误报。对?另外,我如何每次都随机 ping 到不同的站点,例如 facebook、google、yahoo 等。 另外(我试图避免任何 I/O)我可以写入一个日志文件,通过它我可以检查停机检查的计数和然后跳过进一步的检查,直到站点关闭或导致更长的检查(10 分钟而不是每分钟)。你怎么认为?
Oll*_*lli 36
首先,有多种良好的在线监控服务可供使用。选择一个,Pingdom 包括用于监控一个目标的免费帐户。(免责声明:我与 Pingdom没有任何关系)。
其次,wget --spider用于您自己的脚本是一个好主意。当您的计算机出现故障或 DNS 服务器不工作时,您会得到一些误报。检查返回码是实现此目的的直接方法:
wget --spider --quiet http://example.com
if [ "$?" != 0 ]; then
echo "Website failed!" | mail -s "Website down" your_email@provider.tld
fi
Run Code Online (Sandbox Code Playgroud)
然而,这种方法也有缺点。如果您的提供商缓存了您的 DNS 记录,但 DNS 服务器已关闭,即使监控显示一切正常,其他人也无法访问您的站点。host例如,您可以使用 编写简短的解决方法host example.com <your dns server IP>。如果 DNS 服务器没有响应,即使 OpenDNS 或您自己的提供商的 DNS 服务器工作正常,也会返回错误。
在每种情况下都没有真正简单的方法来处理这个问题。
例如,您可以ping -c1在多个知名网站(例如 www.google.com、facebook.com 和 ping.funet.fi)上运行并检查返回代码以确定是否可以到达任何目的地。您可以使用 variable 自动检查返回码$?。参数-c1是将 ping 数据包的数量限制为 1。
当存在重定向所有 ping 和 HTTP 请求的登录网关时,您可能会遇到一些公共 wifi 的问题。如果是这样,即使您无法访问任何其他站点,您也可能会收到 ping 响应和非错误 HTTP 状态代码。
如果要检查电缆状态,可以使用
sudo ethtool eth0
Run Code Online (Sandbox Code Playgroud)
从输出(摘录):
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
Link detected: yes
Run Code Online (Sandbox Code Playgroud)
但是,这并不能说明您是否真的有连接,只是说明是否已连接电缆以及另一端是否有东西。
小智 9
我正在使用这种方法...
if [[ "$(ping -c 1 8.8.8.8 | grep '100% 丢包')" != "" ]]; 然后
echo "互联网不存在"
出口 1
别的
echo "Internet is present"
wget www.site.com
菲
检查站点是否正常运行通常是使用nagios. 这将持续监控站点,并可以通知您中断。
从命令行检查 Internet 是否已启动时,我执行了以下几个步骤:
ping google.com(检查 DNS 和已知的可访问站点)。wget或w3m获取页面。如果上网不起来,向外诊断。
如果 Internet 已启动但站点已关闭,请检查w3m http://isup.me/example.com替换example.com为出现故障的站点。如果您没有安装 w3m 浏览器,请使用 wget、lynx 或任何可用的命令行浏览器。