我希望我的 systemd 服务在失败时自动重新启动。此外,我想对重新启动进行速率限制。我想在 90 秒内最多允许 3 次重启。因此我做了以下配置。
[Service]
Restart=always
StartLimitInterval=90
StartLimitBurst=3
Run Code Online (Sandbox Code Playgroud)
现在服务在失败时重新启动。在 3 次快速失败/重新启动后,它不再按预期重新启动。现在我希望 systemd 在超时 ( StartLimitInterval
)后启动服务。但是 systemd 不会在超时(90 秒)后自动启动服务,如果我在超时后手动重新启动服务,它正在工作。但我希望 systemd 在StartLimitInterval
. 请让我知道如何实现此功能。
小智 46
要以 90 秒的间隔重启服务 3 次,请在 systemd 服务文件中包含以下几行:
[Unit]
StartLimitIntervalSec=400
StartLimitBurst=3
[Service]
Restart=always
RestartSec=90
Run Code Online (Sandbox Code Playgroud)
在systemd-230
它被称为之前StartLimitInterval
:
[Unit]
StartLimitInterval=400
StartLimitBurst=3
[Service]
Restart=always
RestartSec=90
Run Code Online (Sandbox Code Playgroud)
这对我使用Type=idle
. 注意StartLimitIntervalSec
必须大于,RestartSec * StartLimitBurst
否则服务会无限重启。
我花了一些时间反复试验来弄清楚 systemd 如何使用这些选项,这表明 systemd 并没有像人们希望的那样有详细的文档记录。这些选项有效地提供了我正在寻找的重试周期时间和最大重试次数。
参考:https : //manpages.debian.org/testing/systemd/systemd.unit.5.en.html单元部分 https://manpages.debian.org/testing/systemd/systemd.exec.5.en。服务部分的html
小智 21
几年后,使用systemd 232,它不再像问题和 2016 年的答案中所述那样工作。选项名称StartLimitIntervalSec
和部分已更改。现在它必须看起来像这个例子:
[Unit]
StartLimitBurst=5
StartLimitIntervalSec=33
[Service]
Restart=always
RestartSec=5
ExecStart=/bin/sleep 6
Run Code Online (Sandbox Code Playgroud)
这将在 30 秒 (5*6) 内重新启动 5 次,并在 33 秒内重新启动一次。所以我们在 33 秒内有 6 次重启。这超出了在 33 秒内重新启动 5 次的限制。所以重新启动将在大约 31 秒后停止在 5 个计数处。
小智 11
您描述的行为与文档一致:
StartLimitInterval=, StartLimitBurst= 配置服务启动速率限制。默认情况下,在 10 秒内启动超过 5 次的服务不允许再启动,直到 10 秒间隔结束。通过这两个选项,可以修改此速率限制。使用 StartLimitInterval= 配置检查间隔(默认为管理器配置文件中的 DefaultStartLimitInterval=,设置为 0 以禁用任何类型的速率限制)。使用 StartLimitBurst= 配置每个间隔允许的启动次数(默认为管理器配置文件中的 DefaultStartLimitBurst=)。这些配置选项与 Restart= 结合使用特别有用。但是,它们适用于所有类型的启动(包括手动),而不仅仅是由 Restart= 逻辑触发的启动。请注意,配置为 Restart= 且达到启动限制的单元不再尝试重新启动;然而,它们仍可能在稍后手动重启,从那时起,重启逻辑再次被激活。请注意, systemctl reset-failed 将导致刷新服务的重启率计数器,如果管理员想要手动启动服务并且启动限制会干扰该服务,这将非常有用。
我仍在努力寻找一种方法来完成你想要的行为。
归档时间: |
|
查看次数: |
89946 次 |
最近记录: |