以编程方式重新启动Node.js服务器

22

如何从代码中重新启动Node.js服务器?例如,如果使用expressjs框架,

app.get('/restart', function (req, res, next) {
//Code to restart a server
})

我想通过应用程序这样重新启动服务器,而不需要进入控制台等等。如何做到?

3个回答

28

我使用forever来启动和监控应用程序。 因此,重新启动功能如下:

app.get('/restart', function (req, res, next) {
  process.exit(1);
});

服务器关闭后,forever将重新启动服务。

控制台输出:

Express服务器在开发模式下监听端口3000
错误:Forever检测到脚本退出代码为1
错误:Forever正在第2次重启脚本
Express服务器在开发模式下监听端口3000。

但是谁会在forever崩溃或挂起时监视和重新启动它呢? - JustAMartin

1
通过结合 npm restartchild_process.exec(),似乎可以以编程方式重新启动服务器。由于它允许运行多个脚本来停止、重启和启动服务器,因此即使是多进程服务器或其他复杂的服务器,在简单调用 process.exit() 不可行的情况下,这个选项也可以起作用。

5
好的,我会尽力进行翻译。下面是需要翻译的内容:an example would be great and allow future reader to better understand your answer一个例子会很好,可以让未来的读者更好地理解你的答案。 - Webwoman
有任何示例可以说明它是如何工作的吗?child_process 的重点在于它是一个子进程,关闭父进程也会关闭子进程,因此您不能让子进程重新启动父进程。 - undefined
@undefined 你可以将一个子进程标记为detached,这样它就可以在父进程销毁后仍然存在。因此,如果你使用它,在命令的开头加上一个“sleep”命令(以防并发运行是个问题),那么它应该可以工作。 - Venryx

0

您可以将子进程标记为detached,我相信这会使其在父进程销毁后继续存在。因此,如果您在命令的开头使用“sleep”命令(以防并发运行出现问题),那么它应该可以工作。

因此,大概像这样(未经测试):

const newProcessInstance = spawn(process.argv[0], process.argv.slice(1), {
  detached: true,
  stdio: 'ignore', // not sure if this is needed
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接