Puma systemd服务重启超时提示失败但实际启动成功如何排查
根因说明
你配置的Puma systemd服务使用了Type=notify类型,该模式要求业务进程启动完成后主动向systemd发送READY=1的通知信号,否则systemd会始终判定进程处于启动中状态,等待超时后就会返回启动失败错误,哪怕进程本身已经正常启动对外提供服务。你观察到的服务状态停留在activating (start)就是典型的未收到启动通知的表现。
排查修复方案
- 首先修改Puma配置文件
/srv/app/current/config/puma.rb,添加配置项:
该配置会开启Puma的systemd通知支持,启动完成后自动发送READY信号给systemd。systemd_socket true - 若添加配置后问题依然存在,可检查Puma版本:你当前使用的4.3.8版本存在部分场景下通知发送异常的已知bug,可升级到4.3.12以上的4.x稳定版本,或5.x、6.x稳定分支解决。
- 若暂时无法升级Puma,可临时调整systemd服务配置规避:将
puma.service中的Type=notify改为Type=exec,同时注释掉WatchdogSec=10配置,修改后执行systemctl daemon-reload重载配置即可,该方案会失去systemd看门狗的异常自动检测能力,仅作为临时规避方案使用。
systemd未获取的预期反馈
systemd在Type=notify模式下等待的是Puma进程主动发送的READY=1信号,该信号用来告知systemd进程已经完成启动流程,可以对外提供服务。
内容的提问来源于stack exchange,提问作者Rob Lucas
相关产品推荐
相关产品推荐

