在 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
应用程序,还可以使用 bash
、python
、php
等等 - 这正是我正在寻找的。
假设我想在一个“主”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
应用程序,还可以使用 bash
、python
、php
等等 - 这正是我正在寻找的。