systemd服务自身重启策略管理
你贴的这一段是 systemd 的 unit 文件中 [Service] 部分的配置。重点是你问的:
Restart=on-failure
我来详细解释:
1️⃣ Restart 选项
Restart 决定 当服务退出时 systemd 是否重启服务,以及 什么条件下重启。常用值包括:
| 值 | 含义 |
|---|---|
no |
默认,不自动重启 |
always |
不管退出状态如何,总是重启 |
on-success |
仅在退出状态码为 0 时重启 |
on-failure |
仅在服务异常退出时重启(非 0 状态码、信号终止、超时) |
on-abnormal |
服务被信号杀死或异常退出才重启 |
on-abort |
服务因信号异常退出(如 SIGABRT)才重启 |
2️⃣ 触发条件(on-failure)
当 Restart=on-failure 时,systemd 会在以下情况触发重启:
-
服务 退出状态码非 0
例如:systemctl start myservice # 服务内部返回 exit 1 -
服务被 非正常信号终止(如 SIGSEGV、SIGBUS、SIGTERM)
-
超时(如果配置了
TimeoutStartSec或TimeoutStopSec并超时退出)
重要:手动
systemctl stop停掉服务不会触发重启,因为这是正常操作。
3️⃣ 配合 RestartSec 与限制
你还配置了:
RestartSec=5s
StartLimitIntervalSec=60
StartLimitBurst=3
含义:
-
RestartSec=5s→ 重启前等待 5 秒 -
StartLimitIntervalSec=60+StartLimitBurst=3→ 防止重启风暴:如果 60 秒内连续失败超过 3 次,systemd 会停止重启尝试,进入失败状态。
4️⃣ 总结
Restart=on-failure 是 systemd 自动恢复服务的一种策略:
-
服务异常退出 → systemd 自动重启
-
服务被手动停止 → 不重启
-
结合
RestartSec+StartLimit*可控制重启频率和间隔
如果你需要,我可以帮你画一个 systemd 重启逻辑流程图,直观展示 on-failure、always、手动停止和异常退出的区别。
你希望我画吗?
浙公网安备 33010602011771号