systemd服务在StartLimitInterval后自动重启

我希望我的systemd服务在故障时自动重新启动。 另外我想率限制重新启动。 我想在90秒内最多允许3次重启。 因此我做了以下configuration。

[服务]
重启=始终
StartLimitInterval = 90
StartLimitBurst = 3

现在服务在失败时重新启动。 3次快速故障/重新启动后,不再按预期重新启动。 现在我期望systemd在超时后启动服务(StartLimitInterval)。 但是systemd在超时后(90秒)不会自动启动服务,如果我在超时工作后手动重启服务。 但是我希望systemd在StartLimitInterval之后自动启动服务。 请让我知道如何实现这个function。

要以90秒为间隔重新启动服务3次,请在systemd服务文件中包含以下行:

 Restart=always RestartSec=90 StartLimitInterval=400 StartLimitBurst=3 

这个工作对我来说是一个使用'Type = idle'运行脚本的服务。 请注意,“StartLimitInterval”必须大于“RestartSec * StartLimitBurst”,否则服务将无限期地重新启动。

我花了一些时间进行了大量的试验和错误,以计算出系统如何使用这些选项,这表明systemd没有人们所期望的那么好logging。 这些选项有效地提供了我正在查找的重试周期时间和最大重试次数。

您所描述的行为与文档一致:

StartLimitInterval =,StartLimitBurst =configuration服务启动速率限制。 默认情况下,在10秒内启动超过5次的服务不允许再次启动,直到10秒间隔结束。 有了这两个选项,这个速率限制可以修改。 使用StartLimitInterval =configuration检查时间间隔(默认为pipe理器configuration文件中的DefaultStartLimitInterval = 0,设置为0以禁用任何types的速率限制)。 使用StartLimitBurst =来configuration每个时间间隔允许的启动次数(默认为pipe理器configuration文件中的DefaultStartLimitBurst =)。 这些configuration选项在与Restart =相结合时特别有用。 然而,它们适用于各种启动(包括手动),而不仅仅是由Restart =逻辑触发的启动。 请注意,configuration为Restart =且达到启动限制的单元不会尝试重新启动; 然而,他们仍然可以在稍后的时间手动重新启动,从这一点开始,重新启动逻辑再次被激活。 请注意,systemctl重置失败将导致刷新服务的重新启动速率计数器,如果pipe理员想要手动启动服务并且启动限制会干扰该情况,这非常有用。

我仍然在试图找出一种方法来完成你所期望的行为。

您可以设置OnFailure在失败时启动另一个服务。 在失败服务中,您可以运行一个脚本,等待并重新启动您的服务。

有关如何设置此示例的示例,请参阅系统状态邮件在单元失败并修改它重新启动服务。