Node.js 集群主进程在得到 kill 和 pgrep 后重新启动
Node.js cluster master process reboot after got kill & pgrep?
第一个问题:
在 Node.js 集群中,我知道如果集群工作线程崩溃或被杀死,它将使用新实例再次自动启动。但是,如果当主进程被杀死时,如果它被杀死或崩溃,我们如何使主进程再次自动启动怎么办?我试图杀死主进程,整个集群也被杀死了。有没有办法防止这种情况?
if (cluster.isMaster) {
require('os').cpus().forEach(function () {
cluster.fork();
});
cluster.on('exit', function (worker, code, signal) {
cluster.fork();
});
} else if (cluster.isWorker) {
...
}
第二个问题:
我想我们可以从process.pid中找到主进程。但是如果没有来自 Node 的这些信息.js并且查看 pgrep -l 节点的输出,我如何确定哪个是主进程 ID?无论如何,当我 fork() 它时我可以标记或命名进程,以便我可以在 pgrep 命令中找到主进程?
$ pgrep -l node
1420 node
1419 node
1418 node
1417 node
1416 node
1415 node
1414 node
1413 node
1412 node
更新
按照@fardjad下面的建议应用 process.title 后,它运行良好。以下是 pgrep 的结果:
$ pgrep -fl acl
1994 acl_api_worker_8 USER=nam
1993 acl_api_worker_7 USER=nam
1992 acl_api_worker_6 USER=nam
1991 acl_api_worker_5 USER=nam
1990 acl_api_worker_4 USER=nam
1989 acl_api_worker_3 USER=nam
1988 acl_api_worker_2 USER=nam
1987 acl_api_worker_1 USER=nam
1986 acl_api_master SHELL=/bin/bash
我建议您不要监视集群中的主进程,因为您将无法处理SIGKILL
。你可以为此使用暴发户,monit或永远。
关于您的第二个问题,您可以设置流程标题:
if (cluster.isMaster)
process.title = 'master';
...
}
有关详细信息,请参阅文档。