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

我写了一个简单的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. ... 即使网站在线。

任何想法可能会导致不好的ping?

你只发送一个数据包,所以你冒相当多的误报。

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

考虑使用wget代替。 它有类似于--tries=10--waitretry=6 ,这将给主机一分钟响应几次连接尝试,每次尝试几个数据包。

这还会让您知道主机是否正确响应或者响应是否有错误。

我不明白你为什么用ping来判断“网站是否在线”。 Ping没有Web服务器响应主机端口号的概念。 Ping是ICMP,Web服务器响应HTTPHTTPS

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

为了增加它,有意义的事情之一是评估Web服务器是否为GET请求返回适当的状态代码(比如说200)。

请在here看看有什么需要做的细节。