如何在特定的Node版本上运行pm2?

32

我们的Linux服务器上有几个不同版本的 Node,我的服务基于 Node v0.11.14。然而,其他人的代码必须运行在低于 v0.11 的 Node 版本中,否则他们的服务将无法使用。因此,我不能定义全局 Node 版本为 v0.11。我只想运行 pm2 监控我的基于 Node v0.11 的服务。

有没有办法在不改变全局 Node 版本的情况下,在 Node v0.11 上运行我的 pm2?谢谢。

5个回答

51
使用pm2,并使用--interpreter标志指定节点版本,节点版本的绝对路径: 使用pm2并在--interpreter标志下指定Node版本的绝对路径:
sudo pm2 start app.js --interpreter=/home/ken/.nvm/v4.4.2/bin/node

或者
sudo pm2 start app.js --interpreter=/home/ken/.nvm/v7.4.0/bin/node

如果你在我提到 --interpreter="***.." 的地方更改节点版本,应用程序将在精确的节点版本中运行。

完成上述方法后,使用以下命令进行验证

sudo pm2 show 'app name'

在Ubuntu上,对于nvm版本0.33.5,我必须使用以下命令:sudo pm2 start app.js --interpreter=/home/ken/.nvm/verions/node/v7.4.0/bin/node - sujeet
1
它在集群模式下无法工作。例如,pm2 start app.js -i 2 --interpreter="***.." <<=== 不起作用。 - Waqas Malik

14
请阅读以下线程:使用不同的node版本通过nvm运行每个应用程序 我相信你想要规避nvm,但请相信它可以节省很多时间。
您可以在该线程中找到来自pm2所有者本人的评论,其中指出您可以在不同的node版本上运行多个应用程序,下面是一个JSON配置内容:

{ 
  apps : [{
    name : 'API',
    script : 'api.js',
    interpreter : 'node@6.9.1'
 }]
}

如果您对上述解决方案感兴趣,请在此处阅读文档:PM2 - 进程文件 PM2可以增强您的进程管理工作流程。通过进程文件,您可以微调每个应用程序的行为、选项、环境变量和日志文件。它特别适用于基于微服务的应用程序。支持的配置格式包括JavaScript、JSON和YAML。

8
在使用集群模式时需要记住的一件事是... [PM2][WARN] 在集群模式下选择 Node.js 版本是不被支持的。这意味着,所有应用程序都需要使用与 pm2 执行的相同版本的 node。 - Marc
你把这个文件放在哪里?放在应用程序的目录里吗?只需要将pm2.json放在文件所在的目录中即可。 - the_gesslar

11

要同时运行多个版本,在 pm2 中,你可以使用 --interpreter 选项并指定你想要的 Node 版本的路径。

如果你使用 n 来管理 Node 版本,请运行 n bin v4.2.0 来获取该 Node 版本的路径。


2
最后我检查过,集群模式下它是坏的。现在它能用了吗? - Tuan Anh Tran
@TuanAnhTran 在集群模式下我没有遇到任何问题。 - Sylvain
在集群模式下,我的解释器也无法工作。 - tanner burton

2

如果这对你来说真的不起作用,以下是一些调试步骤:

确保使用解释器和生态系统文件上解释器的完整绝对路径:

interpreter: "/home/Mattia/.nvm/versions/node/v18.17.1/bin/node"

将 pm2 更新到最新版本:

$ npm install pm2@latest -g

然后终止 pm2 进程:

pm2 kill

并重新启动 pm2 进程。


-3

安装https://github.com/creationix/nvm

然后安装特定的Node版本:

nvm install 0.11.14

与其在 shell 中使用通用版本,不如使用特定版本:

nvm use 0.11.14

node -v // v0.11.14

谢谢你的回答,但nvm use 0.11.14会将全局node版本更改为v0.11.14吗? - hwoarangzk
1
Nvm基本上是一个shell函数,因此没有全局更改,使用nvm设置的版本绑定到shell会话。 - Yevgen Safronov
FYI,您可以在不同的Node.js版本上使用nvm为每个用户安装一个实例,并且全局安装一个pm2。我想补充说明的是,Node.js 11版本不稳定,但12版本是稳定的。;) - soyuka
非常感谢!我会尝试一下的! :) - hwoarangzk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接