Объединение/размещение приложений 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"
        }
    ]
}

В большинстве случаев я хочу обратиться ко всем приложениям в текущем пространстве имен, например.

pm2 restart foo

вместо выполнения

pm2 restart foo-main foo-bar foo-baz

Bash расширение расширений не может использоваться, поскольку приложения могут работать в Windows.

Выполнение pm2 restart /home/foo/someconfig.json не является хорошим вариантом, поскольку для определения пути к файлу конфигурации требуется некоторое время, он может отличаться в разных проектах и ​​даже изменять его местоположение.

Может ли foo-* приложение быть объединено в одно приложение foo или вообще передано другим разумным способом?

Ответ 1

Похоже, что pm2 сам по себе не поддерживает перезапуск на основе шаблонов, но сделать это просто script не сложно, используя pm2 API.

Вот рабочий script, который демонстрирует идею:

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 в качестве аргумента командной строки (теперь он жестко запрограммирован) и обработать выход (теперь он работает, но не выходит на финиш).

Вот пример полного кода , включая небольшие примеры приложений и конфигурации.