我想知道是否有一个通用函数或者可以做一个函数来重启进程;就像 process.disconnect()
但在这种情况下,它会在调用函数时重新启动脚本。
最佳答案
一般进程管理器用于(自动)重启进程,如monit、pm2、nodemon、forever等
但是,您可以通过简单地生成一个分离的子进程等待一段时间然后执行相同的脚本来从进程本身重新启动。您可以结合使用两个命令来执行此操作,一个用于 sleep ,另一个用于当前命令行,或者您可以简单地将 sleep 合并到您的脚本中。后者的一个例子:
const { spawn } = require('child_process');
(function main() {
if (process.env.process_restarting) {
delete process.env.process_restarting;
// Give old process one second to shut down before continuing ...
setTimeout(main, 1000);
return;
}
// ...
// Restart process ...
spawn(process.argv[0], process.argv.slice(1), {
env: { process_restarting: 1 },
stdio: 'ignore',
}).unref();
})();
在 Windows 上,您可能需要将 detached: true
添加到您的 spawn()
配置对象中。对于 *nix,这通常不是必需的。
但要记住的一件事是,如果原始进程是在前台启动的,那么任何重新启动的进程都将无法再访问终端。
此外,您还可以消除延迟和 process.env
检查您的脚本是否不使用在任何给定时间最多只能由一个进程使用的任何资源。
最后一点:如果您的进程异常崩溃,由于内存耗尽、触发 C++ 断言、V8 错误等,您的进程显然不会重新启动(即使您有一个 'unhandledException'
为 process
设置的事件处理程序)。为了解决这些情况,您几乎需要某种外部机制来重新启动该过程。
关于javascript - Node.js 进程重启,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40835187/