目录

PM2 重启后服务丢失?从 .pm2 文件夹完整恢复进程指南

PM2 重启后服务丢失?如何从 .pm2 文件夹恢复所有进程(完整指南)

在服务器上部署 Node.js 应用时,很多人选择使用 PM2 来管理进程。但不少人在服务器重启后发现:

pm2 list
→ 空的,没有任何服务

然而 .pm2/ 文件夹还在,说明之前的进程信息依然存在。这让人疑惑:为什么 PM2 服务会消失?如何恢复?

本文总结了 PM2 进程丢失的原因,并提供了 三种完整恢复方案


🧩 一、为什么 PM2 重启后进程会消失?

PM2 进程丢失通常来自三个原因:


1. 没有执行 pm2 save(最常见)

PM2 不会自动保存正在运行的应用列表。

必须手动执行:

pm2 save

它会生成:

~/.pm2/dump.pm2

该文件用于重启后恢复进程。

如果没有保存,系统重启后 PM2 会启动,但进程列表为空。


2. 没有配置 PM2 开机自启

必须执行:

pm2 startup

并且执行 PM2 自动输出的 systemctl 命令

例如:

sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u ubuntu --hp /home/ubuntu

如果不执行这一步,PM2 不会在开机时读取 dump.pm2 文件,也不会恢复进程。


3. 用错用户运行 pm2

PM2 进程按用户分离:

用户 PM2 进程存储目录
root /root/.pm2/
ubuntu / admin /home/ubuntu/.pm2/
wenhao /home/wenhao/.pm2/

如果:

  • 之前用 ubuntu 启动服务
  • 重启后用 root 查看

结果就是:

pm2 list → 空

.pm2 文件夹实际上还在目标用户目录中。


🟢 二、情况 1:有 dump.pm2 → 一步恢复进程

检查文件是否存在:

ls ~/.pm2/dump.pm2

如果存在:

🔥 执行恢复:

pm2 resurrect

然后:

pm2 list

所有服务即可恢复,包括:

✔ 名称 ✔ 启动参数 ✔ 环境变量 ✔ 重启策略

这是最干净、最完整的恢复方式。


🟠 三、情况 2:没有 dump.pm2,但使用 ecosystem 文件

如果你项目目录里存在:

ecosystem.config.js

那么恢复非常简单:

pm2 start ecosystem.config.js
pm2 save

所有服务会按 ecosystem 文件定义自动恢复。


🔵 四、情况 3:没有 dump.pm2,也没有 ecosystem → 从 PM2 日志恢复

即便 dump 文件不存在,PM2 仍然会在日志里记录你以前执行的命令。

搜索历史:

grep "pm2 start" ~/.pm2/*log

示例输出:

pm2 start app.js --name api
pm2 start worker.js --name job-worker

然后重新启动服务:

pm2 start app.js --name api
pm2 start worker.js --name job-worker
pm2 save

这样就完全恢复之前的进程结构。


🧪 五、恢复后记得启用开机自启(非常重要)

否则重启服务器后仍然会丢失。

执行:

pm2 startup

PM2 会输出类似:

sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u ubuntu --hp /home/ubuntu

复制并执行这行命令

然后保存当前进程列表:

pm2 save

🧱 六、最佳实践:确保以后永不丢失 PM2 进程

下面是官方推荐的黄金组合:

1. 启动服务后立即保存

pm2 save

2. 启用开机启动

pm2 startup

3. 执行 PM2 输出的 systemctl 命令

(很多人就是忘记这一步)

4. 定期备份 .pm2 文件夹

~/.pm2/dump.pm2
~/.pm2/logs/

🧭 七、总结

情况 恢复方式
dump.pm2 存在 pm2 resurrect
ecosystem.config.js 存在 pm2 start ecosystem.config.js
两者都没有 从日志恢复启动命令

无论哪种情况,你的进程都可以恢复。


📩 如果你提供以下信息,我能帮你自动恢复:

whoami
ls -l ~/.pm2
cat ~/.pm2/dump.pm2