systemd服务失败后延迟重启需配置restartsec=参数,它必须与restart=策略(如on-failure、always)配合使用,位于[service]段,典型值为3~30秒,并应搭配startlimitintervalsec和startlimitburst防雪崩。

Linux 中设置 systemd 服务失败后的延迟重启,核心是配置 RestartSec= 参数,它必须和 Restart= 策略配合使用才生效。
明确 RestartSec 的作用和位置
RestartSec= 指定服务异常退出后、下一次启动前的等待秒数。它只在 [Service] 段中定义,且仅当 Restart= 触发重启时起作用(比如 on-failure、always 等)。默认值是 100 毫秒,太短容易触发启动限流,生产环境建议设为 3~30 秒,视服务冷启动时间而定。
- 轻量服务(如 API 网关、Web UI):设为
RestartSec=3或5 - 模型服务或依赖加载重的服务(如 vLLM、xinference):设为
RestartSec=15或30 - 避免设为
0或极小值(如1),否则可能因端口未释放、资源未清理导致连续失败
必须搭配 Restart= 策略才能生效
单独写 RestartSec 不起作用。你需要先指定重启条件:
专业股权研究自动化系统,支持6,000-10,000字首发覆盖报告和3,000-5,000字季报更新报告。触发词:股票研究、深度研究、首发覆盖、季报更新、DCF估值。
-
Restart=on-failure:最常用,覆盖非零退出、被信号终止、超时、OOM kill 等真实故障场景 -
Restart=always:适合本不该正常退出的服务(如长期运行的推理模型) -
Restart=on-abnormal:排除主动调用exit(0)的情况,更精准控制
例如完整配置片段:
[Service] ExecStart=/usr/bin/python3 /opt/myapp/app.py Restart=on-failure RestartSec=5 StartLimitIntervalSec=60 StartLimitBurst=3
防雪崩:限制单位时间内重启次数
不加限制的延迟重启可能引发“崩溃 → 等待 → 启动 → 再崩溃”循环,拖垮系统。务必同步配置启动频次熔断:
-
StartLimitIntervalSec=60:滚动统计窗口为 60 秒 -
StartLimitBurst=3:该窗口内最多允许启动 3 次 - 超出后 systemd 会标记为
start-limit-hit并暂停自动重启,此时需人工查日志定位根因
验证是否生效
改完配置别忘了重载并测试:
sudo systemctl daemon-reloadsudo systemctl restart myapp.service- 模拟崩溃:
sudo systemctl kill --signal=SIGSEGV myapp.service(慎用于生产) - 观察日志:
journalctl -u myapp.service -n 50 -f,确认出现Started和Starting交替记录,且间隔接近你设的RestartSec值










