要彻底删除 pm2 通过 pm2 startup systemd 注册的 systemd 自启服务,需执行三步:先运行 pm2 stop all && pm2 reset 停止并重置 pm2;再执行 pm2 unstartup systemd 卸载服务;最后执行 sudo systemctl daemon-reload && sudo systemctl list-unit-files | grep pm2 确认无输出。

pm2 startup 生成的 systemd 服务怎么删
PM2 的 pm2 startup 命令会在 systemd 中注册一个开机自启服务(如 pm2-root),它不是简单删掉某个应用就能禁用自启的。真正要取消“自启”,得从 systemd 层面移除这个服务。
执行以下三步:
- 先停掉当前运行的 PM2 守护进程:
pm2 stop all && pm2 reset - 再卸载 systemd 服务:
pm2 unstartup systemd(注意不是uninstall) - 最后重载配置并确认服务已不存在:
sudo systemctl daemon-reload && sudo systemctl list-unit-files | grep pm2—— 正常应无输出
如果 pm2 unstartup 报错“no init system detected”,说明你当初没用 pm2 startup 注册过,那根本不存在自启项,跳过即可。
只取消某一个 app 的自启,但保留其他
PM2 本身不支持“单个应用开机自启”,它的 startup 是全局的:一旦启用,所有通过 pm2 start 启动且未被 delete 的应用,都会在系统重启后由 pm2-root 拉起。
所以想让某个 app 不自启,只有两个可靠办法:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
-
删掉它再启动别的:用
pm2 delete <app_name></app_name>彻底移出 PM2 管理列表;之后即使系统重启,pm2-root也找不到它 -
改用配置文件 + 条件启动:在
ecosystem.config.js中为该 app 设置autorestart: false,并确保它不被pm2 start ecosystem.config.js加载(比如注释掉或拆分配置)
别依赖 pm2 stop <app_name></app_name> —— 这只是暂停,不影响下次开机是否拉起。
systemctl disable 之后为什么还启动了
常见误区:以为 sudo systemctl disable pm2-root 就万事大吉。其实不行,因为 PM2 的自启逻辑是双层的:
- systemd 层:负责开机时执行
pm2 start恢复上次状态 - PM2 自身层:它会读取
~/.pm2/dump.pm2,把所有online或errored状态的应用重新拉起
所以必须同步清理 dump 文件:pm2 save --force(清空保存状态)或直接删掉 ~/.pm2/dump.pm2(更彻底)。删完记得 pm2 reset,否则 pm2 list 可能显示残留 ID。
验证自启是否真被取消
最稳妥的验证方式不是看 systemctl is-enabled,而是模拟一次重启流程:
- 执行
pm2 stop all && pm2 reset - 手动触发 systemd 重载:
sudo systemctl daemon-reload - 用
sudo systemctl start pm2-root模拟开机动作 - 立刻查
pm2 list—— 若目标 app 不在列表中,才算真正取消成功
注意:pm2 startup 默认绑定的是当前用户(如 root),如果你用普通用户运行过 PM2,可能同时存在 pm2-username 服务,得挨个检查。










