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

如何让Node进程遇到特定日志响应时实现自动重启?

解决Forever监控特定非致命错误自动重启Node脚本的问题

嘿,这个问题我之前也碰到过——forever只盯着进程崩溃,那种"进程没死但彻底罢工"的错误确实头疼。给你两个实用的解决方案,看你更倾向哪种:

方案1:在Node脚本内部主动触发重启(推荐)

既然你能精准识别出那个"服务器超时导致的凭证错误",最直接的方式就是在脚本里捕获到这个特定错误时,主动让进程退出。因为forever默认会在进程非0状态退出时自动重启它(如果需要更精准控制,可以加启动参数调整)。

具体操作:

  • 找到你处理这个凭证错误的代码位置(比如catch块、错误回调里)
  • 加入判断逻辑,一旦匹配到目标错误,就用process.exit(1)退出进程
  • 可选:给forever加启动参数,避免短时间内无限重启:forever start --minUptime 1000 --spinSleepTime 5000 your-script.js(意思是进程至少运行1秒才会被视为稳定,重启间隔5秒)

示例代码片段:

// 假设你是在异步操作的catch中处理错误
async function handleMessage() {
  try {
    // 你的消息处理逻辑,比如调用接口获取凭证
    const credentials = await fetchCredentials();
    // ...后续逻辑
  } catch (error) {
    // 精准匹配你的错误信息,比如根据错误消息或错误码
    if (error.message.includes("服务器超时引发的凭证错误") || error.code === "CRED_TIMEOUT") {
      console.error("[致命错误] 凭证失效,将退出进程触发重启");
      // 非0状态退出,让forever重启
      process.exit(1);
    } else {
      // 其他非致命错误,仅记录日志不退出
      console.error("[非致命错误] 处理失败:", error);
    }
  }
}

方案2:用外部脚本监控日志触发重启

如果你不想修改Node脚本的代码,可以写一个简单的监控脚本,实时盯着forever生成的错误日志,一旦出现目标错误关键词,就调用forever restart命令重启进程。

步骤:

  1. 先确保forever把错误日志输出到指定文件,启动时指定日志路径:

    forever start -l forever.log -o out.log -e err.log your-script.js
    

    这里err.log就是我们要监控的错误日志文件。

  2. 写一个bash监控脚本(保存为monitor-restart.sh):

    #!/bin/bash
    # 替换成你的错误日志绝对路径
    LOG_FILE="/absolute/path/to/err.log"
    # 替换成你日志里的具体错误关键词
    TARGET_ERROR="服务器超时引发的凭证错误"
    # 替换成你的脚本名称(forever能识别的进程标识)
    SCRIPT_NAME="your-script.js"
    
    # 实时监控日志文件的新增内容
    tail -fn0 "$LOG_FILE" | while read -r line; do
      if echo "$line" | grep -q "$TARGET_ERROR"; then
        echo "[$(date)] 检测到目标错误,重启进程..."
        # 重启指定进程
        forever restart "$SCRIPT_NAME"
        # 可选:清空错误日志,避免重复触发(如果错误会重复打印的话)
        # echo "" > "$LOG_FILE"
      fi
    done
    
  3. 给脚本加执行权限,然后后台运行:

    chmod +x monitor-restart.sh
    nohup ./monitor-restart.sh &
    

这个方案的好处是不用动应用代码,但缺点是依赖日志输出的准确性,如果日志格式变了可能会失效。

额外建议:考虑换成PM2

如果以后有机会,不妨试试PM2——它比forever功能更丰富,内置了日志管理、自定义重启规则,甚至可以通过配置文件直接指定"日志出现特定关键词时重启",不用自己写监控脚本。而且PM2的进程监控更稳定,还支持负载均衡、日志轮转等实用功能。

内容的提问来源于stack exchange,提问作者WildGunman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:22:57