Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在全局错误脚本中在内部重新启动Node.js服务器?_Node.js_Restart_Internal - Fatal编程技术网

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

如何在全局错误脚本中在内部重新启动Node.js服务器?,node.js,restart,internal,Node.js,Restart,Internal,我一直在四处浏览,但没有成功。我发现了一些npm包,比如nodemon和forever,但文档中没有解释如何在脚本中正确调用重启 我在另一个问题上找到了代码片段,但我没有使用Express或其他框架,因为脚本使用的是拉取服务,而不是响应服务 这是迄今为止我使用内部Node.js依赖项编写的代码,但运气不好 请注意,我正在Termux上运行服务器,Termux是android的Linux终端应用程序。我知道从桌面上运行更好,但我总是在WiFi或移动数据区,我不喜欢让我的电脑整夜开机。在脚本中调

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

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

这是迄今为止我使用内部Node.js依赖项编写的代码,但运气不好




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

在脚本中调用
process.exit()

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


我有一个家庭自动化服务器,正在被监控使用永远。如果它永远崩溃,它将自动重新启动。我还将其设置为每天早上4点,它将调用
process.exit()
,然后forever将自动重新启动它。我这样做是为了防止任何内存泄漏累积在很长一段时间和30秒的下降时间在午夜,因为我的应用没有什么大不了。

奇怪的是,我尝试了NoDimon,但是我不能得到<代码>进程。您是否有一个我可以尝试的最小代码片段,在nodemon脚本和app.js脚本之间用注释分隔?@Nova-我相信nodemon更多的是在修改任何脚本文件时重新启动脚本(对开发有用)。它也会在退出时重新启动脚本,但我认为这并不是它构建的主要目的。这就是为什么我使用。我只是用
forever start server.js
启动我的应用程序。因此process.exit()应该会导致forever重新启动app.js?@Nova-是的,如果你使用
forever
启动你的应用程序,那么
process.exit()
将退出你的应用程序,然后
forever
将重新启动它。正如我在回答中所说的,我在家庭自动化服务器中使用的正是这一功能,可以在凌晨4点自动重启。
'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)