我尝试了很多次不同的组合,但似乎仍然不是很稳定和智能的解决方案。因此,我列出了一些我能想到的逻辑,您可以在升级和编写脚本时应用并监控结果。
基本上在我的情况下,我们有一堆应用程序在Node下运行。因此,当您需要 PM2 启动同样安装在 Node Version Managers 下的另一个应用程序时,事情变得复杂起来,例如 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
在启动时冻结列表。