【问题标题】:Reload all pm2 clusters from within 1 of the clusters从 1 个集群中重新加载所有 pm2 集群
【发布时间】: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 文件。结果是一样的。

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

【问题讨论】:

    标签: node.js pm2 spawn


    【解决方案1】:

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

    但是,对我有用的是运行一个带有分离的衍生子进程的 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,得到的结果与问题中所述相同。

    我希望这可以帮助任何尝试完成类似事情的人。

    【讨论】:

      猜你喜欢
      • 2021-12-26
      • 2021-03-28
      • 2016-03-03
      • 2014-06-03
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多