今天才知道pm2有个坑,它的pm2-root依赖libc,当apt 自动更新libc依赖后,会触发needrestart
apt Post-Invoke hook 调用 needrestart(-m u,Ubuntu 模式,restart mode 默认 a 自动重启),批量重启 18 个服务,包含 pm2-root.service
libc 升级本身不会重启任何进程。链条是:
apt-daily-upgrade.timer (每日)
└─ unattended-upgrades 升级 libc6
└─ /etc/apt/apt.conf.d/99needrestart 的 DPkg::Post-Invoke
└─ /usr/lib/needrestart/apt-pinvoke -m u
└─ needrestart 检测到守护进程仍映射已删除的旧 libc
└─ restart mode = 'a'(APT hook 下 Ubuntu 默认自动重启)
└─ systemctl restart pm2-root.service
└─ ExecStop=pm2 kill → 所有 app 一起被停
之后 pm2 daemon 用 `pm2 resurrect` 恢复进程,但恢复的是上次`pm2 save`的进程,如果你后来用更新了pm2守护的进程却没有save,那就不会随之重启了……