适用于 systemd 245+。示例单元要替换;读取完整日志、查看系统级单元配置通常需要相应权限。先别急着 reset-failed 或手动反复启动,不然容易把最初那次失败埋进一串重试里。
date -u
systemctl --version | head -n 1
systemctl status app.service --no-pager -l
systemctl show app.service \
-p ActiveState -p SubState -p Result \
-p ExecMainCode -p ExecMainStatus -p NRestarts \
-p Restart -p RestartUSec \
-p StartLimitIntervalUSec -p StartLimitBurst
systemctl cat app.service
journalctl -u app.service --since '-30 min' --no-pager -o short-precise
Result=start-limit-hit 只说明单位在时间窗口内启动太频繁,systemd 暂停继续拉起;真正原因通常在它前面的第一次退出。ExecMainCode=exited 配合非零 ExecMainStatus 更像应用主动报错退出,ExecMainCode=killed 则继续查信号来源。也要看 Restart=:设为 always 时,即使主进程正常退出也会再次启动。
修正应用参数、依赖或重启策略后,再执行 systemctl reset-failed app.service 清掉失败状态和启动频率计数,然后启动一次。复核 systemctl is-active app.service、NRestarts 是否继续增长,并检查新时间窗内是否还出现同一条首次错误。只把 StartLimitBurst 调大,通常只是让失败循环跑得更久。