我用不同的组合尝试了很多次,但似乎仍然不是很稳定和聪明的解决方案。因此,我列出了一些我能想到的逻辑,您可以在升级和编写脚本时应用和监控结果。
基本上在我的情况下,我们有一堆应用程序在Node下运行。PM2
因此,当您需要启动也安装在节点版本管理器下的另一个应用程序时,事情会变得复杂,例如NVM
前任。我有
nvm ls
-> v14.17.6
PM2安装在:
which pm2
~/.nvm/versions/node/v14.17.6/bin/pm2
因为我使用的是 App1(一个由 npm 管理的 NodeJS 应用程序)。我有:
which App1
~/.nvm/versions/node/v14.17.6/bin/App1
所以每次我使用 nvm 升级时:
nvm install --lts --reinstall-packages-from=14 --latest-npm
然后 nvm 在此控制台中使用较新版本。例如 14.7.999999
也许我(大多数时候)需要在同一维护窗口升级我的 PM2 和其他应用程序,我使用ncu并ncu -g
升级它们。
现在,应用程序以所有新版本结束。前任。一个新的 PM2 实例(本地)和一个在旧节点文件夹中运行(在内存中)与旧的消费者应用程序 (App1) 的旧 PM2。新版本的 App1 现在存在于新的 Node 应用程序文件夹中,但未运行。
In memory PM2 version: 5.1.0
Local PM2 version: 5.1.1
无论如何,如果您没有 PM2 的升级版本,您可能仍在寻找安装在新 Node 文件夹下的 PM2 的新路径。如果没有,您可以使用升级后的节点再次安装 PM2
npm i -g pm2
更糟糕的是 PM2 在系统启动脚本中,需要重新编写。前任。
/etc/systemd/system/pm2-xx.service
所以我最终消失了所有应用程序:
pm2 stop app1 && pm2 delete app1
pm2 stop app2 (verdaccio json startup config) && pm2 delete app2
...
pm2 stop appN && pm2 delete appN
然后做:
pm2 update
交换到新的 PM2 实例
然后重新配置所有应用程序
pm2 start app1, app2, ... appN
然后做
pm2 update
要更新应用程序列表,请检查是否使用了正确的节点路径。
如果所有应用程序路径都已更正
pm2 startup systemd
并复制并运行建议的启动脚本
sudo env PATH=$PATH:/....
最后运行
pm2 save
在启动时冻结列表。