我们的linux服务器上运行了几个不同版本的node,而我的服务是基于node v0.11.14的。但是,其他人的代码必须在较低版本的节点(低于 v0.11)上运行,否则他们的服务将停止服务。所以我无法将全局节点版本定义为 v0.11。我只想运行 pm2 来监控我基于节点 v0.11 的服务。
是否可以在不更改全局节点版本的情况下在节点 v0.11 上运行我的 pm2?谢谢
使用 pm2 并使用带有节点版本绝对路径的 --interpreter 标志指定节点版本:
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'
请阅读以下主题: 通过 nvm 为每个应用程序使用不同版本的节点
我相信你想破解 nvm,但相信我它可以节省你的大部分时间。
您可以在 pm2 所有者本身的线程中找到一条评论,其中声明您可以在不同节点版本上运行多个应用程序,这是一个 JSON conf 内容:
{
apps : [{
name : 'API',
script : 'api.js',
interpreter : '[email protected]'
}]
}
如果您对上述解决方案感兴趣,请阅读此处的文档: PM2 - 过程文件
PM2 增强您的流程管理工作流程。它允许您通过进程文件微调每个应用程序的行为、选项、环境变量和日志文件。它对于基于微服务的应用程序特别有用。
支持的配置格式有Javascript、JSON和YAML。
同时运行多个版本。在
pm2
中,您可以使用--interpreter
选项并指定您想要的节点版本的路径。
如果您使用
n
作为版本运行 n bin v4.2.0
以获取此节点版本的路径。
如果你想让pm2使用特定版本的节点,在你的
ecosystem.config.js
文件中使用以下两个指令:
{
...
exec_mode: "fork",
interpreter: "[email protected]", // or any installed version
...
}
必须使用
exec_mode: "fork"
,否则您的节点应用程序将被创建为您的主 pm2 进程的子进程,该进程使用系统当前使用的节点版本。
安装https://github.com/creationix/nvm
然后安装特定节点版本:
nvm install 0.11.14
比在 shell 中使用特定版本:
nvm use 0.11.14
node -v // v0.11.14