You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 18:01:26