Добавить воркера в пул PM2. Не перезагружать / перезапускать существующие воркеры

Env .: Node.js в Ubuntu с программным использованием PM2.

Я запустил PM2 с 3 экземплярами через Node в моем основном коде. Предположим, я использую командную строку PM2 для удаления одного из экземпляров. Могу ли я снова добавить в пул другого воркера? Можно ли это сделать, не влияя на работу других рабочих?

Полагаю, мне следует использовать метод start:

pm2.start({
 name : 'worker',
 script    : 'api/workers/worker.js',         // Script to be run
 exec_mode : 'cluster',        // OR FORK
 instances : 1,                // Optional: Scale your app by 4
 max_memory_restart : '100M',   // Optional: Restart your app if it reaches 100Mo
 autorestart : true
 }, function(err, apps) {
 pm2.disconnect();
 });

Однако, если вы используете pm2 monit, вы увидите, что 2 существующих экземпляра перезапущены, а другие не созданы. Результатом остается 2 запущенных экземпляра.

update не имеет значения, cluster или fork - поведение одинаковое.

обновление 2. В командной строке есть параметр scale (https://keymetrics.io/2015/03/26/pm2-clustering-made-easy/), но я не вижу этого метода в документации по программному API (https://github.com/Unitech/PM2/blob/master/ADVANCED_README.md#programmatic-api).


person noderman    schedule 16.08.2015    source источник


Ответы (2)


Я действительно думаю, что это невозможно сделать в PM2, потому что у меня точно такая же проблема.

Извините, но я думаю, что решение состоит в том, чтобы использовать что-то еще, поскольку PM2 довольно ограничен. Отсутствие возможности добавить больше рабочих - это для меня нарушение сделки.

Я знаю, что вы можете «масштабировать» в командной строке, если используете кластеризацию, но я понятия не имею, почему вы не можете запускать больше экземпляров, если используете fork. Это не имеет никакого смысла.

person Mike    schedule 06.01.2016
comment
да. Если вы хотите иметь эластичный пул рабочих, масштабирование должно быть в первую очередь вашим умом, и это следует делать программным способом, чтобы вы действительно могли писать код для принятия решений в соответствии с нагрузкой на сервер. Я оставлю вопрос открытым ... надеюсь, он скоро будет выпущен ... - person noderman; 07.01.2016

Насколько мне известно, все команды PM2 также можно использовать программно, включая scale. Ознакомьтесь с CLI.js, чтобы увидеть все доступные методы.

Попробуйте использовать атрибут force в объявлении приложения. Если force истинно, вы можете запускать один и тот же сценарий несколько раз, что обычно не разрешено PM2 (согласно документы декларации приложения)

Кстати, autorestart по умолчанию true.

person Pere Joan Martorell    schedule 23.01.2016