restartsec=参数控制systemd服务失败后的重试间隔,单位为秒且需配合restart=策略生效;常见值为1、5或10秒,避免设为0以防触发启动频率限制,并须结合startlimitintervalsec和startlimitburst防雪崩。

Linux中systemd服务失败后的重试间隔,由RestartSec=参数控制,它定义进程退出后、下一次启动前的等待秒数。这个值必须配合Restart=策略一起生效,单独设置无效。
核心配置项:RestartSec
RestartSec=是决定“等多久再试”的关键参数,单位为秒(支持小数,如RestartSec=2.5)。常见取值逻辑如下:
- 设为
1:适合轻量级、冷启动快的服务,崩溃后约1秒内拉起 - 设为
5或10:更稳妥,给系统留出资源释放和日志刷盘时间,也降低高频重启风险 - 避免设为
0:虽然语法允许,但可能触发 systemd 的启动频率限制(StartLimitBurst),导致服务被临时禁启
必须搭配 Restart= 策略
RestartSec不会自动生效,需明确指定何时触发重启:
-
Restart=on-failure:仅在非零退出码、被信号终止(如 SIGSEGV)、超时或 OOM kill 时重试——最常用、最贴近“故障恢复”语义 -
Restart=always:任何退出(包括 exit(0))都重试,适合无状态常驻服务,但需警惕业务逻辑误退出 -
Restart=on-abnormal:排除正常退出和超时,只响应信号终止或内部错误
若未设Restart=,即使写了RestartSec,systemd 也不会尝试重启。
防雪崩:限制重试频次
仅设间隔不够,还需防止持续失败拖垮系统。通过以下两个参数协同控制:
-
StartLimitIntervalSec=60:统计窗口为60秒 -
StartLimitBurst=3:该窗口内最多允许3次启动尝试
超出后,systemd 将标记服务为start-limit-hit并停止重试,需人工介入。可用systemctl reset-failed 服务名手动清空计数器。
验证与调试方法
配置完成后,务必实测确认行为符合预期:
- 重载配置:
sudo systemctl daemon-reload - 触发崩溃测试:
sudo systemctl kill --signal=SIGSEGV 服务名 - 观察日志:
journalctl -u 服务名 -n 30 -f,确认重启时间是否接近设定的RestartSec - 检查当前生效值:
systemctl show 服务名 | grep -E "(Restart|RestartSec|StartLimit)"











