合并/命名空间PM2应用程序

Est*_*ask 11 node.js pm2

有PM2配置, /home/foo/someconfig.json

{
    "apps": [
        {
            "name": "foo-main",
            "script": "./index.js",
        },
        {
            "name": "foo-bar",
            "script": "./bar.js"
        },
        {
            "name": "foo-baz",
            "script": "./baz.js"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

大多数时候我想引用当前命名空间下的所有应用程序,例如

pm2 restart foo
Run Code Online (Sandbox Code Playgroud)

而不是做

pm2 restart foo-main foo-bar foo-baz
Run Code Online (Sandbox Code Playgroud)

无法使用Bash大括号扩展,因为应用程序可能在Windows中运行.

pm2 restart /home/foo/someconfig.json不是一个好的选择,因为它需要一些时间来计算配置文件路径,它可能在项目之间有所不同甚至改变它的位置.

可以foo-*应用合并到单一foo的应用程序或以另一种合理的方式完全简称?

Bor*_*rov 5

pm2本身似乎不支持基于通配符的重启,但使用pm2编程API制作一个简单的脚本并不复杂.

这是一个演示这个想法的工作脚本:

var pm2 = require('pm2');

pm2.connect(function(err) {
  if (err) {
    console.error(err);
    process.exit(2);
  }

  pm2.list(function(err, processDescriptionList) {
    if (err) throw err;
    for (var idx in processDescriptionList) {
      var name = processDescriptionList[idx]['name'];
      console.log(name);
      if (name.startsWith('foo')) {
        pm2.restart(name, function(err, proc) {
          if (err) throw err;
          console.log('Restarted: ');
          console.log(proc);
        });
      }
    }
  });
});
Run Code Online (Sandbox Code Playgroud)

为了使其完全正常运行,还需要传递foo命令行参数(现在它是硬编码的)并处理退出(现在它可以工作,但不会在完成时退出).

这是完整的代码示例,包括小样本应用程序和配置.


mrt*_*rsn 5

pm2从 2.4.0 开始支持正则表达式,例如

pm2 restart /^foo-/
Run Code Online (Sandbox Code Playgroud)

如果与start命令一起使用,请记住提供生态系统文件作为第一个参数。