如何解决从 1 个集群中重新加载所有 pm2 集群
我有一个在多个 pm2 集群上运行的 nodejs 应用程序。我创建了一个路由,通过它我更新应用程序的代码(从 Git 远程拉取新代码),然后我尝试通过使用 exec
运行重新加载命令(pm2 reload [server])来重新加载所有 pm2 集群。
我遇到的问题是,一旦启动进程的集群为了重新加载而终止,它就不会继续重新加载剩余的集群。
因此,在研究(阅读 node documentation 并查看 this SO question)之后,很明显处理这个问题的正确方法是 spawn
一个子进程并运行 {{1 }} 方法就可以了。然而,这并没有改变任何事情。一些集群重新加载,但不是全部。
代码如下:
unref()
我还尝试添加基于节点
的 const {spawn} = require('child_process');
const reload = spawn(`pm2`,[`reload`,`server`],{detached: true,stdio: 'ignore'});
reload.unref();
,但出现错误 reload.disconnect()
。
此外,我没有在子进程中运行命令“pm2 reload server”,而是尝试通过分离的子进程执行包含该命令的 bash 文件。结果是一样的。
总而言之,我想知道如何在启动进程的集群终止后继续为所有集群重新加载。 我也想知道,为什么我试过的方法都行不通。
解决方法
我仍然不知道为什么它不像我在问题中发布的那样工作。
但是,对我有用的是运行一个带有分离的衍生子进程的 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`],stdio: 'ignore'});
reload.unref();
注意:我首先尝试在 reload.js 中使用 exec
并且得到了问题中概述的相同结果。
我希望这能帮助任何试图完成类似事情的人。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。