gpt4 book ai didi

linux - Systemd http 健康检查

转载 作者:IT王子 更新时间:2023-10-29 00:26:08 26 4
gpt4 key购买 nike

我在 Redhat 7.1 上有一个服务,我使用 systemctl start、stop、restart 和 status 来控制。有一次 systemctl 状态返回事件状态,但服务“背后”的应用程序响应的 http 代码不同于 200。

我知道我可以使用 Monit 或 Nagios 来检查它并重新启动 systemctl - 但我想知道在使用 systemd 时是否默认存在某些东西,这样我就不需要安装其他工具。

如果 http 返回码不同于 200,我的首选解决方案是完全自动重启我的服务,除了 systemd 本身之外没有其他工具——(也许有可能通知 Hipchat 房间或发送电子邮件......)

我试过用谷歌搜索这个主题 - 但没有成功。请帮助:-)

最佳答案

简短的回答

systemd 有一个 native (基于套接字的)健康检查方法,但它不是基于 HTTP 的。但是,您可以编写一个 shim,通过 HTTP 轮询状态并将其转发到 native 机制。


长答案

systemd 世界中正确的做法是使用 sd_notify 套接字机制在您的应用程序完全可用时通知 init 系统。为您的服务使用 Type=notify 以启用此功能。

您可以使用 sd_notify() 直接写入此套接字调用,或者您可以检查 NOTIFY_SOCKET 环境变量以获取名称,并让您自己的代码在应用程序返回 200 秒时将 READY=1 写入该套接字。

如果你想把它交给一个单独的进程,通过 HTTP 轮询你的进程,然后写入套接字,你可以这样做——确保适本地设置 NotifyAccess(默认情况下,只允许服务的主进程写入套接字。


如果您有兴趣检测应用程序在完全初始化后失败并触发重启的情况,sd_notify 套接字也适用于这种情况:

发送 WATCHDOG_USEC=... 设置成功测试之间允许的时间量,然后当您成功进行自检时发送 WATCHDOG=1;只要在配置的时间内没有看到成功的测试,您的服务就会重新启动。

关于linux - Systemd http 健康检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39679067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com