获得kill&pgrep后,Node.js集群主进程重启?

Nam*_*yen 1 javascript node.js

第一个问题:

在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) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

第二个问题:

我想我们可以从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
Run Code Online (Sandbox Code Playgroud)

更新

在我应用了下面提到的@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
Run Code Online (Sandbox Code Playgroud)

far*_*jad 5

我建议你不要监视集群中的主进程,因为你将无法处理SIGKILL.您可以使用upstart,monitforever.

关于第二个问题,您可以设置流程标题:

if (cluster.isMaster)
    process.title = 'master';
    ...
}
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅文档.