【发布时间】:2021-06-24 17:01:14
【问题描述】:
我有一个 nodejs 应用程序在多个 pm2 集群上运行。我创建了一条路由,通过该路由更新应用程序的代码(从 Git 远程提取新代码),然后尝试使用 exec 运行重新加载命令(pm2 reload [server])重新加载所有 pm2 集群。
我遇到的问题是,一旦启动进程的集群终止以重新加载,它就不会继续重新加载剩余的集群。
因此,在研究(阅读node documentation 并查看this SO question)之后,显然处理此问题的正确方法是spawn 一个子进程并在其上运行unref() 方法。然而,这并没有改变什么。一些集群会重新加载,但不是全部。
代码如下:
const {spawn} = require('child_process');
const reload = spawn(`pm2`, [`reload`, `server`], {detached: true, stdio: 'ignore'});
reload.unref();
我也尝试添加reload.disconnect(),基于节点
,但收到错误disconnect is not a function。
此外,我没有在子进程中运行命令“pm2 reload server”,而是尝试通过分离的子进程执行包含该命令的 bash 文件。结果是一样的。
总之,我想知道如何让所有集群的重新加载继续进行,即使在启动进程的集群终止后也是如此。 我也想知道,为什么我尝试的方法不起作用。
【问题讨论】: