发生 express 错误时,pm2 不会重新启动 worker
Posted
技术标签:
【中文标题】发生 express 错误时,pm2 不会重新启动 worker【英文标题】:pm2 does not restart worker when express error occur 【发布时间】:2015-11-11 04:01:32 【问题描述】:我正在使用 pm2 来管理我的 nodejs express 应用程序中的进程(以集群模式运行)。
我们有两种错误处理程序
FIRST: 'uncaughtException' 将被处理
process.on('uncaughtException', function(err));
实际上,我并没有声明这样的处理程序,因为在这种情况下让 pm2 检测到死掉的工人,所以自动重启死掉的工人。
SECOND:表示错误处理程序,我的意思是错误将被转发到表示错误处理程序,而不是 uncaughtException 处理程序,错误处理程序如下所示
app.use(function(err, req, res, next) )
我也没有出于与 uncaughtException 相同的目的声明此错误处理程序。 但是这种情况下 pm2 不会重启节点。
对这个问题有任何想法吗? 非常感谢
【问题讨论】:
真的需要重启你的应用吗?如果我没记错的话,该应用程序仍在运行并且可以响应新请求。由于捕获到异常,您应该在快速错误处理程序中响应一些漂亮的页面,说明存在问题,而不是让客户端的浏览器超时。 是的,当错误被快速错误处理程序捕获时,服务器不会崩溃。但是,异常意味着您的代码中存在一些问题,并且服务器可能会进入不稳定状态,您无法知道它将来会对请求做出什么反应。我认为在这种情况下,我们应该重启这个节点。 然后您可以在记录发生的情况后在错误处理程序中尝试 process.exit(0)。 pm2 应该重新启动它。 是的,我刚刚这样做了,现在一切正常。 【参考方案1】:当使用 express 错误处理程序甚至“uncaughtException”事件捕获错误时,进程仍在运行,因此 pm2 不会重新启动它。 如果您希望 pm2 在每次异常后重新启动,我建议您这样做:
process.on('uncaughtException', function(e)
console.log('An error has occured. error is: %s and stack trace is: %s', e, e.stack);
console.log("Process will restart now.");
process.exit(1);
)
快速错误处理程序也是如此。当我们执行 process.exit 方法时,进程会终止,pm2 会重新启动它。
【讨论】:
以上是关于发生 express 错误时,pm2 不会重新启动 worker的主要内容,如果未能解决你的问题,请参考以下文章
解决node+express在linux上关闭服务器服务就停止的问题(非PM2)
有没有办法使用cron重新启动pm2进程但是只有它还没有运行?