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 会在以下情况触发重启:

  1. 服务 退出状态码非 0
    例如:

    systemctl start myservice
    # 服务内部返回 exit 1
    
  2. 服务被 非正常信号终止(如 SIGSEGV、SIGBUS、SIGTERM)

  3. 超时(如果配置了 TimeoutStartSecTimeoutStopSec 并超时退出)

重要:手动 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-failurealways、手动停止和异常退出的区别。

你希望我画吗?

posted on 2025-09-22 18:07  吃草的青蛙  阅读(62)  评论(0)    收藏  举报

导航