【问题标题】:Ping returns false even website is online即使网站在线,Ping 也会返回 false
【发布时间】:2017-10-20 01:55:39
【问题描述】:

我编写了一个简单的 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

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

有什么想法会导致 ping 错误吗?

【问题讨论】:

  • ping 要求远程站点主动响应,远程站点可能拒绝这样做。

标签: linux bash unix sh ping


【解决方案1】:

你只发送一个数据包,所以你冒着很多误报的风险。

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

考虑改用wget。它有--tries=10 和--waitretry=6 之类的选项,这将给主机一分钟的时间来响应几次连接尝试,每次尝试几个数据包。

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

【讨论】:

  • 另外:ping 有时会被故意阻止,wget 不会(至少对于网站而言)。
  • 另一个可能的解决方案是使用tcpping(google it),它在后端使用tcptraceroute。它会在您选择的端口上发送一个 tcp 请求以查看它是否响应。
【解决方案2】:

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

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

此外,有意义的一件事是评估 Web 服务器是否为 GET 请求返回正确的状态代码(例如 200)。

请查看here,了解需要做什么的详细信息。

【讨论】:

  • 迄今为止最好的答案,恕我直言。
猜你喜欢
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 2015-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多