9

将 Node.js 从 v10.16 更新到 v10.32 后,未检测到 PM2,但使用 ps aux 检查时运行良好。即使在系统重新启动时,即使手动 PM2 命令导致以下类型的错误,PM2 也能正常工作。

pm2 list pm2: 找不到命令

将 Node.js 切换回 10.16,PM2 命令再次可用。仅供参考 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 后发生?

4

5 回答 5

5

似乎没有办法在节点更新后重新安装 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
于 2017-09-06T09:43:10.937 回答
5

更新 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
于 2018-12-04T14:31:03.630 回答
3

当你切换节点版本时,你也切换了包,所以你需要在节点更新时重新安装 pm2。幸运的是,这种情况并不经常发生。

您可以制作一个 shell sript 一次性完成这两项工作。

对于 unsafe-perm,只有当您以 root 身份安装 pm2 时才会出现。当您认为 pm2 对您的机器进程有相当多的控制时,这是有道理的。

于 2014-10-05T17:16:17.617 回答
3

在控制台中:

  1. pm2 save--首先确保您正确保存了所有进程
  2. npm install pm2 -g--然后从 NPM 安装最新的 PM2 版本
  3. pm2 update--最后更新内存中的PM2进程
于 2020-08-29T07:56:39.980 回答
1

我用不同的组合尝试了很多次,但似乎仍然不是很稳定和聪明的解决方案。因此,我列出了一些我能想到的逻辑,您可以在升级和编写脚本时应用和监控结果。

基本上在我的情况下,我们有一堆应用程序在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 和其他应用程序,我使用ncuncu -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

在启动时冻结列表。

于 2021-09-04T14:23:05.470 回答