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

问题描述 投票:0回答:6

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

pm2 名单 pm2:找不到命令

将 Node.js 切换回 10.16,PM2 命令再次可用。仅供参考 PM2 最初安装在 v10.16 下。

在 v10.32 中尝试使用 PM2 安装命令 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.js pm2
6个回答
9
投票

在控制台:

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

8
投票

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

7
投票

更新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

5
投票

当您切换节点版本时,您也会切换软件包,因此您需要在节点更新时重新安装pm2。幸运的是,这种情况并不经常发生。

您可以制作一个 shell 脚本来一次性完成这两件事。

对于不安全的权限问题,只有当你以 root 身份安装 pm2 时才会出现。当您认为 pm2 对您的机器进程有相当多的控制时,这是有道理的。


1
投票

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

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

要更新应用程序列表,请检查是否使用了正确的Node路径。

如果所有应用路径均已更正 做

pm2 startup systemd

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

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

终于跑了

pm2 save

在启动时冻结列表。


0
投票

检查您是否使用 Node 的 LTS 版本。

查看pm2最新包的命令:

npm install pm2@latest -g

更新pm2的命令:

pm2 update

查看pm2版本的命令:

pm2 -version
© www.soinside.com 2019 - 2024. All rights reserved.