在egg中启动自定义cluster失败
发布于 6 年前 作者 samcsf 3766 次浏览 来自 问答

尝试在egg中使用自定义启动一组自己写的cluster, 但是却启动不了,cluster的变量也很奇怪,请教一下各位大神

// 自定义启动 app.js
module.exports = app => {
  app.beforeStart(async () => {
    app.cluster = require('./cluster/master');
  });
};
// ./cluster/master.js
const cluster = require('cluster');
console.log('NODE_UNIQUE_ID' in process.env); // false
console.log(cluster.isMaster); //false
...
module.exports = cluster;

最奇怪的就是从app.js 调用执行master.js 后,尽管NODE_UNIQUE_ID是undefined,但cluster.isMaster却是false???实在想不通。因为isMaster是false, 后面的setupMaster()等操作也无法进行。

8 回复

因为 app.js 已经是 cluster fork 的 worker 进程了。

@atian25 根据cluster模块描述,NODE_UNIQUE_ID如果是undefined,isMaster应该是true的,但log出来看却是false,不太明白🤔

你的原始场景是啥

@atian25 是这样的,我需要在同一台机器上用cluster跑多进程,想说在启动egg 前把那个cluster跑起来,然后把cluster对象传进去,基于egg 写一套类似pm2那样的管理api。

没太明白,PM2 不是一个 CLI 么,你是想写一个 PM2-Admin 这样的东西,还是要写一个 PM2 来管理其他进程?

@atian25 算是pm2 admin那样吧,想远程管理

那 egg 其实你用来做 admin 就好了,不用用来管理 process,把他们独立为 2 个东西。 即使要在 egg 里面管理其他 node 进程的话,那也应该在 agent 里面做才对,因为 app 是多个的。

BTW,可以用下 https://github.com/node-modules/cfork

@atian25 好的,我先研究下,把它们独立开来,谢谢天猪

回到顶部