【问题标题】:Merging/namespacing PM2 apps合并/命名 PM2 应用程序
【发布时间】:2021-06-25 17:12:41
【问题描述】:

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

{
    "apps": [
        {
            "name": "foo-main",
            "script": "./index.js",
        },
        {
            "name": "foo-bar",
            "script": "./bar.js"
        },
        {
            "name": "foo-baz",
            "script": "./baz.js"
        }
    ]
}

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

pm2 restart foo

而不是做

pm2 restart foo-main foo-bar foo-baz

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

pm2 restart /home/foo/someconfig.json 不是一个好选择,因为它需要一些时间来确定配置文件路径,它可能会因项目而异,甚至会更改其位置。

foo-* 应用程序可以合并到单个 foo 应用程序中,还是以其他合理的方式完全引用?

【问题讨论】:

    标签: node.js pm2


    【解决方案1】:

    貌似pm2本身不支持通配符重启,但是用pm2 programmatic 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);
            });
          }
        }
      });
    });
    

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

    这里是full code example,包括小示例应用和配置。

    【讨论】:

    • 谢谢,pm2 API 很好用。我希望有一种传统的方法来做到这一点,因为全局pm2 命令没有额外的麻烦有它的好处。
    【解决方案2】:

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

    pm2 restart /^foo-/
    

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

    【讨论】:

    • 谢谢,我在搜索“pm2 应用程序通配符”这个词没有成功,认为这可能对未来的谷歌员工有所帮助。
    猜你喜欢
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 2019-10-27
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    相关资源
    最近更新 更多