先把当时的情况摆出来。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 秒以上,能避免把机器拖垮。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189