Linux下PM2开机自启必须先pm2 save再pm2 startup;漏任一步重启后服务均不恢复,因save将进程状态写入dump.pm2文件供startup服务读取启动,startup则生成并启用systemd服务单元。

直接说结论:Linux下PM2开机自启必须分两步走——先pm2 save保存当前服务列表,再pm2 startup生成并启用系统级启动服务;漏掉任意一步,重启后服务都不会恢复。
为什么pm2 save不能省略?
它不是“备份”,而是把当前pm2 list里所有 running / stopped 状态的进程写入一个 dump 文件(默认路径:/root/.pm2/dump.pm2 或 /home/xxx/.pm2/dump.pm2)。没有这个文件,pm2-root服务启动时根本不知道该拉起哪些应用。
- 执行后会明确提示保存位置,比如:
[PM2] Successfully saved in /root/.pm2/dump.pm2 - 如果后续想清空保存列表,直接删掉这个文件就行:
rm ~/.pm2/dump.pm2 - 注意:
pm2 stop app-name不会从 dump 中移除,只有pm2 delete app-name或手动删 dump 文件才真正清除
pm2 startup到底做了什么?
它不是简单加个 systemd 服务,而是根据当前用户身份(root 或普通用户)生成适配的启动脚本,并调用 systemctl enable 注册为开机服务。常见误区是以为执行完就万事大吉,其实还要看输出的那条命令是否真执行了。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 执行
pm2 startup后,终端会输出类似:sudo systemctl enable pm2-root(root 用户)或sudo systemctl enable pm2-xxx(普通用户) - 你必须手动执行这行命令,否则服务不会被 systemd 管理
- 验证是否生效:
systemctl status pm2-root,看到Active: active (running)才算成功 - 如果提示
Failed to enable unit: Unit file pm2-root.service does not exist,说明pm2 startup执行失败或未生成脚本,重试或检查权限
常见错误现象和对应处理
重启后服务没起来,90% 是以下三个原因中的某一个:
-
pm2 save没执行,或执行后又pm2 delete了服务但没再save—— 补执行pm2 save -
pm2 startup输出的systemctl enable命令没手动运行 —— 补运行它,并确认systemctl is-enabled pm2-root返回enabled - 应用启动依赖环境变量(如
NODE_ENV、PORT),但pm2 startup启动时加载的是系统级环境,不读取用户 shell 配置(如~/.bashrc)—— 改用ecosystem.config.js显式声明env,或在pm2 start时加--env production
最易被忽略的一点:dump 文件路径取决于执行 pm2 save 的用户,而 pm2 startup 注册的服务默认以该用户身份运行。如果你用 sudo pm2 start 启动服务,但用普通用户执行 pm2 save,两者 dump 文件不在同一位置,systemd 服务就找不到要恢复的服务。

















