我想每隔几分钟轮询一次是否可以从 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 和传感器)可能值得您花时间。