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 startupPM2 会输出类似:
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u ubuntu --hp /home/ubuntu请 复制并执行这行命令。
然后保存当前进程列表:
pm2 save🧱 六、最佳实践:确保以后永不丢失 PM2 进程
下面是官方推荐的黄金组合:
1. 启动服务后立即保存
pm2 save2. 启用开机启动
pm2 startup3. 执行 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
WenHaoFree