从 1 个集群中重新加载所有 pm2 集群

Reload all pm2 clusters from within 1 of the clusters

我在多个 pm2 集群上有一个 nodejs 应用程序 运行ning。我创建了一条路线,通过它更新应用程序的代码(从 Git 远程拉取新代码),然后我尝试使用 exec 到 运行 重新加载命令重新加载所有 pm2 集群( pm2 重新加载 [服务器]).

我遇到的问题是,一旦启动该进程的集群为了重新加载而终止,它不会继续重新加载剩余的集群。

因此,在研究(阅读 node documentation and looking at 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

此外,我尝试通过分离的子进程执行包含该命令的 bash 文件,而不是在子进程中 运行 命令 'pm2 reload server'。结果是一样的。

总而言之,我想知道如何让所有集群的重新加载继续,即使在启动进程的集群终止后也是如此。 我也想知道,为什么我试过的方法都不行。

我仍然不知道为什么它没有按照我在问题中发布的方式工作。

但是,对我有用的是 运行 一个带有分离派生子进程的 js 文件,该文件又运行一个分离派生子进程来执行重新加载命令。

在我的第一个文件中:

const {spawn} = require('child_process');
const reload = spawn(`node`, [`/reload.js`], {detached: true, stdio: 'ignore'});
reload.unref();

在 reload.js 我有:

const {spawn} = require('child_process');
const reload = spawn(`pm2`, [`reload`, `server`], {detached: true, stdio: 'ignore'});
reload.unref();

注意:我首先尝试在 reload.js 中使用 exec,结果与问题中概述的结果相同。

我希望这对任何试图完成类似事情的人有所帮助。