问题出现得很突然,日志倒是留得挺全。开机后某个服务总是启动失败,手动启动又完全正常,日志里提示依赖的挂载或者网络还没就绪。
这类报错背后常见的原因有几处,逐个排除就行。单元里只写了启动顺序,没有声明依赖关系。还有一种是依赖的网络在线目标还没有达成。
不容易想到的是,挂载点由启动配置处理,服务起得更早。
先看失败的依赖单元
systemctl list-dependencies app --all
然后核对单元里的依赖声明
systemctl cat app | grep -E 'After|Requires|Wants'
补上网络依赖
systemctl edit app
末了重载后模拟一次启动
systemctl daemon-reload && systemctl restart app
这类改动我都写进变更记录,过两周再出问题时能对上号。
我习惯把每一步的执行时间和结果记在一边,后面复盘省事。
别只看报错消失,验证要多做一步。重启后服务一次启动成功,日志里没有依赖未就绪的报错。
提醒一点。启动顺序和依赖是两件事,只写顺序不写依赖,能不能起来完全看运气。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。