[英]Node.js process restart
我想知道是否有通用功能或可以使该功能重新启动该过程; 就像process.disconnect()
但是在这种情况下,它将在调用函数时重新启动脚本。
通常,进程管理器用于(自动)重新启动进程,例如monit,PM2,nodemon,forever等。
但是,您可以通过简单地产生一个等待一段时间并执行相同脚本的分离的子进程来从进程本身重新启动。 您可以将这两个命令组合在一起进行操作,一个命令进入睡眠状态,另一条命令进入当前命令行,或者可以将睡眠状态简单地合并到脚本中。 后者的示例:
var spawn = require('child_process').spawn;
(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错误等导致进程异常崩溃,即使您为process
设置了'unhandledException'
事件处理程序,您的进程也不会明显重启。 为了解决这些情况,您几乎需要某种外部机制来重新启动该过程。
万一您将脚本作为系统守护程序启动(例如,使用upstart或systemd),则可以只使用process.exit()
并让它们负责为您重新创建一个新进程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.