在 NodeJS 应用程序中管理多个进程

Managing multiple processes within a NodeJS application

假设我想在一个“主”NodeJS 应用程序中控制 (start/stop) 其他几个 NodeJS 脚本。但是,不一定是 NodeJS 脚本,也可以是简单的 bash 脚本。

我正在研究以下解决方案,使用 execa

// simplified

const managedProcesses = [];

async function Start (pkg) {
  const runningProcess = await execa(pkg.run_command, {
    cwd : pkg.path
  });
  return runningProcess;
}

async function Stop (pkg) {
  // somehow stop the child process
  return
}

const someProcess = await Start({
  run_command : 'node app.js',
  path : './path/to/my/script/'
});

// Keep Reference of process
managedProcesses.push(someProcess);

我最初认为 pm2 是一个可行的解决方案,但我猜这只适合 NodeJS-only 脚本。

使用上述方法我 运行 会遇到什么问题?

我应该考虑推进这个想法吗?

对于 node.js 子流程,有 cluster module,我强烈建议使用它。对于一般子流程(例如,您提到的 bash 脚本),您必须使用 child_process (-> execa)。然后可以通过 grpc 完成进程之间的通信。你的做法很好,可以考虑继续推进。

我决定暂时完全使用 pm2,因为他们有出色的 programmatic API - also (which I only just learned about) you can specify different interpreters 到 运行 您的脚本。因此,不仅可以使用 node 应用程序,还可以使用 bashpythonphp 等等 - 这正是我正在寻找的。