先把当时的情况摆出来。CentOS 7.9 上一个采集服务配了 Restart=always RestartSec=5,某次端口被占导致启动即崩,五分钟后 systemctl status 显示 failed,理由是 start request repeated too quickly。
把日志和配置对完,能解释这个现象的基本就这几处。StartLimitInterval 与 StartLimitBurst 默认 10 秒内 5 次,超了就不再拉起,状态直接进 failed。另一种情况是Restart=always 对“启动即失败”没有退避,五秒一次疯狂重试。
还有一种情况,reset-failed 之后又 daemon-reload,计数器与 unit 状态对不上,看起来像卡死。
上来先看失败详情与重启次数
systemctl status collector --no-pager -l
再往下清掉 failed 计数
systemctl reset-failed collector
然后放宽上限并加大退避
在 [Service] 里写 StartLimitInterval=300 StartLimitBurst=10 RestartSec=30s
剩下的就是重载并重新启动
systemctl daemon-reload && systemctl start collector
这台环境是别人交接的,不少默认值被动过,只能一项项核。
同事提醒我看一下最近一次发布,时间点确实对得上。
怎么算真的好了,看的是同一批现象。systemctl show collector -p NRestarts 显示计数在增长,ActiveState 保持 active,journalctl 里不再出现 start request repeated。
提醒一点。撞上重启上限说明服务有确定性故障,放宽限制只是给排查留时间;把 RestartSec 加大到 30 秒以上,能避免把机器拖垮。这类问题最好一次改到位,反复小改反而容易把原因搅混。
