Pm2重启长时间失效,超出重启限制问题咨询
服务依赖重启逻辑配置问题
我运行着三个服务,其中ipfs-cluster-runner依赖于ipfs-runner。预期逻辑是:手动停止ipfs-runner后,ipfs-cluster-runner重试10次后停止。该逻辑初始数小时运行正常,但运行11-12小时后失效。我尝试增大min-uptime参数,情况有所改善但未达预期——调整前服务1小时左右就会超出重启限制。
当前service-runner.json配置如下:
{ "apps": [ { "name": "ipfs-runner", "script": "./script.sh", "delay": 5000, "log-file-max-size": "10M", "max_size": "10M", "max_restarts": 5, "error_file": "./logs/debug-ipfs.log", "error_size": "10M" }, { "name": "ipfs-cluster-runner", "script": "./startup.sh", "delay": 10000, "log-file-max-size": "10M", "max_size": "10M", "max_restarts": 5, "error_file": "./logs/debug-cluster.log", "error_size": "10M", "min_uptime": 10000 }, { "name": "file-server-runner", "script": "./file-server-lin", "delay": 10000, "log-file-max-size": "10M", "max_size": "10M", "max_restarts": 10, "error_file": "./logs/debug-file.log", "error_size": "10M", "min_uptime": 3600000 } ] }
配置调整方案
1. 实现依赖服务重试10次后停止
- 修改
ipfs-cluster-runner的max_restarts值为10,这是控制最大重启次数的核心参数 - 确保
startup.sh在检测到ipfs-runner停止时,以非零退出码终止自身进程,这样service-runner才会将其判定为异常退出并计入重启次数 - 在
startup.sh中添加依赖检测逻辑:比如定期检查ipfs-runner的进程状态或API可用性,一旦确认主服务停止,直接退出脚本(返回非零码)
2. 优化min-uptime解决长时间运行异常
min-uptime的作用是:只有当服务持续运行时间超过该值时,重启才会被计入max_restarts统计(避免把启动失败的快速重启算入次数)。针对长时间运行后失效的问题:
- 先计算单次重试周期:假设脚本检测间隔5秒+启动延迟10秒,单次周期约15秒
- 将
ipfs-cluster-runner的min-uptime设置为30000(30秒)——这个值要大于单次重试周期,确保只有真正的依赖失效重启才会被计数 - 如果脚本检测逻辑耗时更长,可适当调高至60000(60秒),核心原则:
min-uptime> 单次依赖检测+重启的完整周期
调整后的参考配置
{ "apps": [ { "name": "ipfs-runner", "script": "./script.sh", "delay": 5000, "log-file-max-size": "10M", "max_size": "10M", "max_restarts": 5, "error_file": "./logs/debug-ipfs.log", "error_size": "10M" }, { "name": "ipfs-cluster-runner", "script": "./startup.sh", "delay": 10000, "log-file-max-size": "10M", "max_size": "10M", "max_restarts": 10, "error_file": "./logs/debug-cluster.log", "error_size": "10M", "min_uptime": 30000 }, { "name": "file-server-runner", "script": "./file-server-lin", "delay": 10000, "log-file-max-size": "10M", "max_size": "10M", "max_restarts": 10, "error_file": "./logs/debug-file.log", "error_size": "10M", "min_uptime": 3600000 } ] }
额外检查项
- 查看service-runner日志,确认长时间运行后
ipfs-cluster-runner的退出原因,排查是否存在依赖检测误判(比如主服务停止后脚本仍持续运行) - 确保
ipfs-runner停止时无残留进程或端口占用,避免ipfs-cluster-runner误判主服务状态
内容的提问来源于stack exchange,提问作者Hamza Sajid
相关产品推荐
相关产品推荐

