更新Node.js后更新PM2的正确方法

svmlkihl  于 11个月前  发布在  Node.js
关注(0)|答案(7)|浏览(183)

将Node.js从v10.16更新到v10.32后,未检测到PM2,但使用ps aux检查时运行正常。即使在系统重新启动时,PM2也能正常运行,尽管手动PM2命令会导致以下类型的错误。
pm2 list pm2:命令未找到
将Node.js切换回10.16,PM2命令再次可用。fyi PM2最初安装在v10.16下。
在v10.32中尝试PM2 install命令npm install pm2 -g,但必须使用命令npm install pm2 -g --unsafe-perm才能运行。
Node.js v10.16现在运行PM2 v10.1。Node.js v10.32现在运行PM2 v10.8。
这是保持PM2版本同步并与Node升级/更改一起工作的正确方法吗?在安装每个新版本的Node后是否需要进行此操作?

jtw3ybtb

jtw3ybtb1#

在控制台中:

  1. pm2 save--首先确保正确保存了所有进程
  2. npm install pm2 -g--然后从NPM安装最新的PM2版本
  3. pm2 update--最后更新内存中的PM2进程
xxe27gdn

xxe27gdn2#

在Node更新后,如果不重新安装PM2,似乎就没有办法了:-(

$ nvm install 6.11.3 --reinstall-packages-from=6.11.2 && nvm alias default 6.11.3
$ nvm uninstall 6.11.2
$ pm2 update # Update in memory pm2
$ pm2 startup
$ nano /etc/init.d/pm2-init.sh  # Wrong path :-(

字符串
但重新安装pm2是不够的,有些东西仍然是坏的,即使它似乎工作,日志是没有更多的真实的时间例如我的热修复:

$ rm -rf /root/.pm2
$ pm2 reload pm2.json --env production
$ pm2 startup ubuntu

eit6fx6z

eit6fx6z3#

更新node.js版本后,不要忘记重新构建包:

cd /to/root/of/your/project
npm rebuild
npm i -g pm2 && pm2 update

# here 0 and dist/main.js change for your project
pm2 delete 0 && pm2 start dist/main.js

字符串

nhjlsmyf

nhjlsmyf4#

当你切换节点版本时,你也切换了包,所以你需要在节点更新时重新安装pm2。幸运的是,这种情况并不经常发生。
你可以做一个shell脚本来一次性完成这两件事。
对于unsafe-perm的问题,只有当你以root身份安装pm2时,它才会出现,当你认为pm2对你的机器进程有很大的控制权时,它是有意义的。

bq3bfh9z

bq3bfh9z5#

我尝试了很多次不同的组合,但似乎仍然不是很稳定和智能的解决方案.因此,我列出了一些逻辑,我可以想到的东西,这可能是你可以应用和监控结果,因为你升级和编写脚本.
基本上,在我的情况下,我们有一堆应用程序运行在Node下。所以当你需要PM2来启动另一个应用程序时,事情变得复杂起来,这些应用程序也安装在Node Version Manager下,比如NVM
前任我有

nvm ls
->     v14.17.6

字符串
PM2安装在:

which pm2
~/.nvm/versions/node/v14.17.6/bin/pm2


由于我使用App 1(由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和其他应用程序,我使用ncuncu -g并升级它们。
现在,应用程序最终都是新版本。例如,一个新的PM2示例(本地)和一个旧的PM2运行(内存中),旧的消费者应用程序(应用程序1)位于旧的节点文件夹中。新版本的应用程序1现在存在于新的节点应用程序文件夹中,但没有运行。

In memory PM2 version: 5.1.0
Local PM2 version: 5.1.1


无论如何,如果您没有升级版本的PM2,您可能仍在寻找安装在新Node文件夹下的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


要更新应用程序列表,请检查是否使用了正确的Node路径。
如果所有应用程序路径都已更正,请执行

pm2 startup systemd


复制并运行建议的启动脚本

sudo env PATH=$PATH:/....


最后运行

pm2 save


在启动时冻结列表。

z9gpfhce

z9gpfhce6#

我尝试了一些我研究过的选项。最后,我在更新Node(通过NVM)后重新安装了PM2。这很有效。

lztngnrs

lztngnrs7#

检查NodeJS版本(LTS)。
检查pm2的最新Package的命令:

npm install pm2@latest -g

字符串
更新pm2的命令:

pm2 update


检查pm2版本的命令:

pm2 -version

相关问题