如何在 Linux 中检查 Web 服务器是否可达?

如何在 Linux 中检查 Web 服务器是否可达?

我想每隔几分钟轮询一次是否可以从 Linux 服务器访问外部 Web 服务器。

假设服务器是10.20.30.40。

我正在遵循本指南。

https://www.baeldung.com/linux/hosts-network-availability

尽管服务器可以访问,但无法 ping 通。

意思是 ping 不会成功。

遗憾的是 netcat 没有安装。

但我可以在端口 443 远程登录服务器

答案1

通常,您可以使用服务器上的端点(特定 URL)来执行此操作。这样您就可以在同一个请求中测试网络访问和服务器可用性(IE 不会崩溃)。

一个简单的curl请求就足以检查。例如:

curl -f -LI http://example.com/foo/bar

如果 example.com 响应 2xx 成功,将返回 0 退出代码(成功)HTTP 状态码。您可以使用简单的 if 语句将其构建到 shell 脚本中:

if curl -f -LI http://example.com/foo/bar ; then
  echo success
else
  echo failed
fi

要选择端点,您可能需要查看正在运行的特定网络服务器。有些为此特定目的提供“健康检查”端点。如果没有,那么主页 ( /) 通常是一个不错的选择。

答案2

尽管服务器可以访问,但无法 ping 通。

所以,首先:修复你该死的 ICMP!没有理由抑制 ping,这样做会让很多事情变得不必要的困难。路径 MTU 发现变得更加困难,网络问题更难以检测,而且它是免费的。我的经验是,正是那些阻止 ICMP 数据包、使 ping 无法进行的网络,最终导致外部无法检测到 TTL 限制,出现令人惊讶的 MTU 问题,包括可以建立“不可能”的 TCP 连接,但随后会失败上班。

没有人喜欢主机在连接出现问题时无法通知您。修复你的 ICMP。

但我可以在端口 443 远程登录服务器

如 Philip Couling 上面所示,对于完整的 HTTPS 请求,请使用curl.

如果您对 TLS 连接建立工作感到满意,openssl s_client可以为您做到这一点:

echo | openssl s_client yourhost:443 || printf 'FAAAAIL!\n'

一般来说,如果您想建立一个服务监控系统,请与其他人已经编写的系统一起使用。如果您需要观察多个服务器,通过邮件或消息通知您,在您的服务器上设置 Grafana(包括 Prometheus 和传感器)可能值得您花时间。

相关内容