如何在出现全局错误时在脚本内部重新启动 Node.js 服务器?
How do I restart a Node.js server internally in the script on global error?
我一直在浏览,但没有成功。我找到了一些 npm 包,比如 nodemon 和 forever,但是文档没有解释如何在脚本中正确调用重启。
我在另一个问题上找到了 this 代码片段,但我没有使用 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 上连接服务器,这是一个 android 的 Linux 终端应用程序。我知道从桌面 运行 更好,但我总是在 WiFi 或移动数据区,我不喜欢让我的电脑整夜开着。
使用 nodemon 或 forever 之类的典型重启将通过在脚本中调用 process.exit()
来触发。
这将退出当前脚本,然后监控代理会看到它退出并为您重新启动它。它的原理与它自己崩溃时相同,但如果您试图安排它关闭,您只需退出该进程,然后监控代理将重新启动它。
我有一个家庭自动化服务器,它一直在被监控。如果它永远崩溃,将自动重新启动它。我还设置了它,以便每天早上 4 点,它会调用 process.exit()
,然后永远自动重启它。我这样做是为了防止长时间积累内存泄漏,半夜 30 秒的停机时间对我的应用程序来说没什么大不了的。
我一直在浏览,但没有成功。我找到了一些 npm 包,比如 nodemon 和 forever,但是文档没有解释如何在脚本中正确调用重启。
我在另一个问题上找到了 this 代码片段,但我没有使用 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 上连接服务器,这是一个 android 的 Linux 终端应用程序。我知道从桌面 运行 更好,但我总是在 WiFi 或移动数据区,我不喜欢让我的电脑整夜开着。
使用 nodemon 或 forever 之类的典型重启将通过在脚本中调用 process.exit()
来触发。
这将退出当前脚本,然后监控代理会看到它退出并为您重新启动它。它的原理与它自己崩溃时相同,但如果您试图安排它关闭,您只需退出该进程,然后监控代理将重新启动它。
我有一个家庭自动化服务器,它一直在被监控。如果它永远崩溃,将自动重新启动它。我还设置了它,以便每天早上 4 点,它会调用 process.exit()
,然后永远自动重启它。我这样做是为了防止长时间积累内存泄漏,半夜 30 秒的停机时间对我的应用程序来说没什么大不了的。