即使网站在线,Ping也会返回false

时间:2017-05-19 20:23:35

标签: linux bash unix sh ping

我写了一个简单的bash脚本来监控我的网站。

#!/bin/bash
# script to check website status (online/offline)

while read site
do
    if ping -w 60 -c1 -q "$site" &>/dev/null; then
        echo "$site is up"
    else
        echo "[$(date +%d-%m-%Y:%H:%M:%S)] $site is not reachable." | slackpost.sh
    fi
done < /home/pi/scripts/www-status/sites.txt # list of sites to check

但有时即使网站在线,我也会阻止...$site is not reachable. ...

任何想法可能会导致糟糕的行为?

2 个答案:

答案 0 :(得分:6)

您只发送一个数据包,因此您会冒很多误报。

当链路饱和时,在正常,健康的网络操作期间会经常丢弃数据包。如果您的单个数据包丢失,您会认为主机已关闭。

请考虑使用wget。它有--tries=10--waitretry=6等选项,它们会给主机一分钟的时间来响应多次连接尝试,每次尝试都会有几个数据包。

这还可以让您知道主机是否正常响应或者是否有错误响应。

答案 1 :(得分:4)

我不明白您为何使用ping来确定“网站是否在线”。 Ping没有Web服务器正在响应的主机端口号的概念。 Ping是ICMP,Web服务器响应HTTPHTTPS

如果您只想查看该主机是否已启动,则可以使用ping。当然,有人指出“ping”和ICMP也可能在网络/主机上被阻止。

要添加它,其中一个有意义的事情是评估Web服务器是否正在为GET请求返回正确的状态代码(例如200)。

请查看here了解有关需要完成的工作的详细信息。