foreverjs 将进程置于 STOPPED 状态而不是重新启动

foreverjs turns process in STOPPED state instead of restarting

我有 nodejs 进程侦听连接。我想让 foreverjs 以这种方式在出现任何连接错误时重新启动它:

amqpConnection.on('error', function (err) {
    console.error(err);
    process.exit(1);
});

但这行不通。出错后我看到我的进程处于这种状态:

~> forever list
info:    Forever processes running
data:        uid  command       script        logfile
data:    [0] OpQF /usr/bin/node my-script.js  my-script-log.log STOPPED

日志文件有连接错误和两次尝试重新启动脚本。

error: Script restart attempt #2
{ [Error: connect ECONNREFUSED]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect' }
error: Forever detected script exited with code: 1

为什么永远停止尝试重新启动我的进程?

我已经重现了您的问题,发现如果在 process.exit 之前发生了一些延迟(1 秒),则永远成功地重新启动您的进程。 看起来当它崩溃得太快时永远不要重新启动进程。

setTimeout(function() {
    process.exit(1);
}, 1000);

我应该阅读 forever 打印的警告!

未停留 运行 超过 --minUptime(默认为 1000 毫秒)的脚本被视为 "spinning"。应该设置 --spinSleepTime 以使旋转脚本重新启动。当省略此参数时,旋转脚本将不会重新启动。