如何在全局错误时在脚本内部重新启动 Node.js 服务器



我一直在浏览但没有成功。我发现了一些 npm 包,如 nodemon 和 forever,但文档没有解释如何在脚本中正确调用重新启动。

我在另一个问题上找到了这个代码片段,但我没有使用 Express 或其他框架,因为脚本使用的是拉取服务而不是响应服务。

这是我到目前为止使用内部 Node .js依赖项制作的代码,但没有运气。


'use strict'
process.on('uncaughtException', (error) => {
  console.error('Global uncaughtException error caught')
  console.error(error.message)
  console.log('Killing server with restart...')
  process.exit(0)
})
process.on('exit', () => {
  console.log('on exit detected')
  const exec = require('child_process').exec
  var command = 'node app.js'
  exec(command, (error, stdout, stderr) => {
    console.log(`error:  ${error.message}`)
    console.log(`stdout: ${stdout}`)
    console.log(`stderr: ${stderr}`)
  })
})
setTimeout(() => {
  errorTriggerTimeBomb() // Dummy error for testing triggering uncaughtException
}, 3000)

请注意,我正在Termux上运行服务器,Termux是Android的Linux终端应用程序。我知道最好从桌面运行,但我总是在WiFi或移动数据区,我不喜欢让我的电脑过夜。

使用

nodemon 或 forever 之类的典型重启将通过在脚本中调用 process.exit() 来触发。

这将退出当前脚本,然后监视代理将看到它已退出并为您重新启动它。 它与自行崩溃的主体相同,但如果您尝试协调它关闭,您只需退出进程,然后监视代理将重新启动它。

我有一个家庭自动化服务器,它被永久监控。 如果它永远崩溃将自动重新启动它。 我还设置了它,以便在每天早上 4 点,它会调用process.exit(),然后永远自动重新启动它。 我这样做是为了防止长时间内存泄漏积累,而我的应用程序在半夜停机 30 秒也没什么大不了的。

最新更新