cla*_*fod 8 linux systemd systemctl
我在Redhat 7.1上有一个服务,我使用systemctl启动,停止,重启和状态来控制.有一次systemctl状态返回活动,但是服务"后面"的应用程序响应了不同于200的http代码.
我知道我可以使用Monit或Nagios来检查并执行systemctl重启 - 但我想知道在使用systemd时是否存在默认值,因此我不需要安装其他工具.
我的首选解决方案是,如果http返回代码完全不同于200而不使用systemd本身以外的其他工具,则重新启动我的服务 - (并且可能有可能通知Hipchat房间或发送电子邮件......)
我试过谷歌搜索主题 - 没有运气.请帮忙 :-)
systemd有一个本机(基于套接字)的healthcheck方法,但它不是基于HTTP的.但是,您可以编写一个通过HTTP轮询状态并将其转发到本机机制的填充程序.
systemd世界中的正确的事情是使用sd_notify套接字机制在应用程序完全可用时通知init系统.使用Type=notify为您服务,启用此功能.
您可以使用sd_notify()调用直接写入此套接字,或者您可以检查NOTIFY_SOCKET环境变量以获取名称,并READY=1在应用程序返回200秒时将您自己的代码写入该套接字.
如果你想把它关闭到一个单独的进程,通过HTTP轮询你的进程,然后写入套接字,你可以这样做 - 确保NotifyAccess设置得当(默认情况下,只允许服务的主进程写入)到插座).
由于您对检测到应用程序在完全初始化后失败并触发重新启动的情况感兴趣,因此sd_notify套接字在此方案中也是合适的:
发送WATCHDOG_USEC=...以设置成功测试之间允许的时间量,然后WATCHDOG=1在您成功进行自检时; 只要在配置的时间段内没有看到成功的测试,您的服务就会重新启动.
| 归档时间: |
|
| 查看次数: |
4799 次 |
| 最近记录: |