限制 systemd 服务手动重启率

限制 systemd 服务手动重启率

我有一个系统,其中一个服务(例如 nginx)有时会通过“systemd restart nginx”过度重启(由于其他脚本的结果,例如应用新配置或轮换日志)。

即使以这种方式“手动”重启服务,systemd 也会因重启频率限制而失败。当然,在某一秒内重启 nginx 10 次也是没有意义的。

那么如何限制服务手动重启率?是否有类似 restart-cooldown 的功能也适用于手动重启请求?似乎所有常用设置都适用于 systemd 自动重启。

答案1

您可以使用StartLimitIntervalSec和实现这一点StartLimitBurst

来自 systemd unit 手册页

StartLimitIntervalSec=间隔,StartLimitBurst=突发

配置单元启动速率限制。在间隔时间范围内启动次数超过突发次数的单元将不允许再启动。使用 StartLimitIntervalSec= 配置检查间隔,使用 StartLimitBurst= 配置每个间隔允许的启动次数。

interval 是一个时间跨度,默认单位为秒,但也可以指定其他单位,请参阅 systemd.time(5)。在管理器配置文件中默认为 DefaultStartLimitIntervalSec=,可以设置为 0 以禁用任何类型的速率限制。burst 是一个数字,在管理器配置文件中默认为 DefaultStartLimitBurst=。

这些配置选项与服务设置 Restart= 结合使用时特别有用(请参阅 systemd.service(5));但是,它们适用于所有类型的启动(包括手动),而不仅仅是由 Restart= 逻辑触发的启动。

请注意,配置为 Restart= 且达到启动限制的单元将不再尝试重新启动;但是,在间隔过后,它们仍可以在稍后的时间点手动或通过计时器或套接字重新启动。从此时起,重新启动逻辑将再次激活。systemctl reset-failed 将导致服务的重新启动速率计数器被刷新,这在管理员想要手动启动单元并且启动限制与之干扰时非常有用。在执行任何单元条件检查后都会强制执行速率限制,因此具有失败条件的单元激活不会计入速率限制。

答案2

您使用的是什么版本的操作系统?nginx 软件包是使用 Linux 发行版的存储库安装的还是从源代码安装的?

也许这些问题的答案可以帮助确定解决问题所需的可能途径。

相关内容