systemd 服务起不来:从 status 读到真正原因
systemctl start xxx 失败时,不要先改一堆配置。绝大多数线索都在 status 和近期日志里。
固定三步
systemctl status foo.service -l --no-pager
journalctl -u foo.service -b --no-pager -n 80
systemctl cat foo.service
status 看当前状态与最近几行;journalctl -u 看该 unit 本开机以来的日志;cat 确认实际生效的 unit 内容(含 drop-in)。
读 status 时盯这些
- Active / Main PID:是 failed、activating 还是一直 activating 超时
- Process 行附近的退出码:exec 失败常见 203/EXEC(路径不对、无执行权限)
- Condition / Assert:条件不满足导致「看似没启动」
改 unit 之后
systemctl daemon-reload
systemctl restart foo.service
只改磁盘上的文件而不 daemon-reload,跑的还是旧单元定义。自定义 override 建议放在 /etc/systemd/system/foo.service.d/*.conf,避免直接改软件包自带的 unit。