问题出现得很突然,日志倒是留得挺全。开机后某个服务总是启动失败,手动启动又完全正常,日志里提示依赖的挂载或者网络还没就绪。

这类报错背后常见的原因有几处,逐个排除就行。单元里只写了启动顺序,没有声明依赖关系。还有一种是依赖的网络在线目标还没有达成。

不容易想到的是,挂载点由启动配置处理,服务起得更早。

先看失败的依赖单元

systemctl list-dependencies app --all

然后核对单元里的依赖声明

systemctl cat app | grep -E 'After|Requires|Wants'

补上网络依赖

systemctl edit app

末了重载后模拟一次启动

systemctl daemon-reload && systemctl restart app

这类改动我都写进变更记录,过两周再出问题时能对上号。

我习惯把每一步的执行时间和结果记在一边,后面复盘省事。

别只看报错消失,验证要多做一步。重启后服务一次启动成功,日志里没有依赖未就绪的报错。

提醒一点。启动顺序和依赖是两件事,只写顺序不写依赖,能不能起来完全看运气。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189