Вопрос или проблема
Я использую PM2 (Node Process Manager) на Windows и мне нужно запустить две отдельные установки PM2 одновременно (обе в кластерном режиме).
У меня есть две полностью изолированные директории установки, в которых есть:
- установка node
- установка pm2
- переменная окружения PATH
- переменная окружения PM2_HOME
Кстати, директории установки переносимы, поэтому нет общих файлов или ключей реестра и т. д.
Когда я запускаю только один экземпляр PM2, все работает нормально (экземпляры дочерних рабочих процессов прикрепляются к процессу node, который запускает PM2). Это хорошо работает для обеих установок.
Однако, если я запускаю оба экземпляра PM2 (один за другим, неважно в каком порядке), второй запускает корректный (второй) процесс node для PM2, но затем прикрепляет экземпляры дочерних рабочих процессов к процессу node первой установки PM2.
Это ошибка в PM2 для Windows или я что-то упускаю?
Как именно второй экземпляр PM2 идентифицирует уже работающий процесс node из первой установки и как я могу этого избежать, чтобы оба процесса PM2 работали отдельно со своими собственными экземплярами дочерних рабочих процессов?
Спасибо за вашу помощь.
Ответ или решение
Проблема с изоляцией двух установок PM2 на Windows
Вы сталкиваетесь с интересной и достаточно распространенной проблемой при работе с PM2 — менеджером процессов Node.js. Ваша задача заключается в запуске двух независимых установок PM2 на Windows, и это требует специфических решений, поскольку PM2, как оказалось, не полностью изолирует процессы в рамках разных инстанций.
1. Причины конфликта между инстанциями PM2
На первый взгляд кажется, что две установки PM2 должны функционировать независимо благодаря различию в установленных директориях и переменных среды. Однако существует несколько факторов, которые могут привести к тому, что второй процесс PM2 будет присоединяться к экземплярам первого:
-
Глобальная конфигурация PM2: PM2 использует конфигурационные файлы и сокеты для управления процессами. При запуске второй инстанции, она может считывать конфигурацию из среды, настроенной в рамках первой установки.
-
Кэш и локальные файлы: Несмотря на то, что вы используете переносимые установки, в некоторых случаях PM2 может создавать временные файлы или кэш, которые не зависят от переменных окружения, и эта информация может быть перекрестно доступна.
2. Рекомендации по изоляции PM2
Чтобы полностью изолировать обе установки, выполните следующие шаги:
a. На уровне системы:
-
Убедитесь, что каждая установка действительно использует свои собственные переменные среды. Для этого проверьте следующие переменные перед запуском PM2:
PM2_HOME
: убедитесь, что эта переменная указывает на уникальную директорию для каждой установки.PATH
: проверьте, что путь к Node.js соответствует нужной установке.
-
Используйте команду в командной строке:
SET PM2_HOME=C:\path\to\pm2\first SET PATH=C:\path\to\node\first\bin
и аналогичные команды для второй установки.
b. Настройка PM2:
-
Управление конфигурацией через JSON: создайте отдельные конфигурационные файлы
ecosystem.config.js
для каждой инстанции. Таким образом вы сможете определить, какие процессы PM2 должны управляться для каждой среды. -
Используйте различные порты для каждого экземпляра так, чтобы процессы не конфликтовали между собой. В данном случае вы можете явно задавать порты в файлах конфигураций и передавать их при запуске.
3. Тестирование
После выполнения всех вышеперечисленных шагов:
- Запустите первую установку PM2 и убедитесь, что она запускает и управляет своими собственными процессами.
- Затем остановите первую установку и протестируйте вторую, следуя той же процедуре.
Проверьте, что каждая установка работает независимо, а рабочие процессы не соприкасаются друг с другом. Если все сделано правильно, появятся два различных экземпляра PM2 с полностью независимыми процессами.
4. Выводы
Проблема, с которой вы столкнулись, скорее всего, вызвана тем, что PM2 не может предоставить полную изоляцию в своем управлении процессами в Windows по умолчанию. С правильной настройкой переменных среды и конфигураций вы сможете обойти эту проблему. Настоятельно рекомендуем проводить регулярные тесты, чтобы гарантировать стабильность работы обеих инстанций PM2. Если будет необходимо, оставайтесь на связи с сообществом PM2 для получения дальнейшей информации о подобного рода вопросах и предстоящих обновлениях.