无法在 Windows 上完全隔离两个 PM2 安装

问题描述 投票:0回答:1

我在 Windows 上使用 PM2(节点进程管理器),需要同时运行两个单独的 PM2 安装(均处于集群模式)。

我有两个完全分开(隔离)的安装目录,它们有自己的:

  • 节点安装
  • pm2安装
  • PATH环境变量
  • PM2_HOME环境变量

顺便说一句:安装目录是可移植的,因此没有共享文件或注册表项等。

当我仅启动一个 PM2 实例时,一切正常(子工作实例附加到运行 PM2 的节点进程)。这对于两种安装都适用。

但是,如果我启动两个 PM2 实例(一个接一个,无论按什么顺序),第二个实例将启动 PM2 的正确(第二个)节点进程,但随后将子工作实例附加到第一个实例的节点进程PM2安装。

这是 Windows 版 PM2 中的错误还是我错过了什么? 第二个 PM2 实例究竟如何识别第一次安装中已运行的节点进程,以及如何避免它,以便两个 PM2 进程与其自己的子工作实例单独运行?

感谢您的帮助。

node.js windows environment pm2 process-isolation
1个回答
0
投票

找到解决方案,PM2在Windows下运行时,其源文件paths.js有一个错误(即使使用单独的PM2_HOME环境变量,独特的内存中命名管道也可以识别已运行的守护进程的套接字)。他们甚至有一条待办事项评论说他们应该修复它......

当前代码:

if (process.platform === 'win32' ||
    process.platform === 'win64') {
  //@todo instead of static unique rpc/pub file custom with PM2_HOME or UID
  pm2_file_stucture.DAEMON_RPC_PORT = '\\\\.\\pipe\\rpc.sock';
  pm2_file_stucture.DAEMON_PUB_PORT = '\\\\.\\pipe\\pub.sock';
  pm2_file_stucture.INTERACTOR_RPC_PORT = '\\\\.\\pipe\\interactor.sock';
}

固定代码(只是一种可能的修复方法):

if (process.platform === 'win32' ||
    process.platform === 'win64') {
  //@todo instead of static unique rpc/pub file custom with PM2_HOME or UID
  pm2_file_stucture.DAEMON_RPC_PORT = '\\\\.\\pipe\\' + process.env['PM2_HOME'] + '\\rpc.sock';
  pm2_file_stucture.DAEMON_PUB_PORT = '\\\\.\\pipe\\' + process.env['PM2_HOME'] + '\\pub.sock';
  pm2_file_stucture.INTERACTOR_RPC_PORT = '\\\\.\\pipe\\' + process.env['PM2_HOME'] + '\\interactor.sock';
}

我还发现了这个报告的问题:https://github.com/Unitech/pm2/issues/5212

© www.soinside.com 2019 - 2024. All rights reserved.