core: add RestartRandomizedDelaySec= service option
We already support exponential backoff for automatic restarts via RestartSec=/RestartSteps=/RestartMaxDelaySec=, but there is no way to randomize the restart delay. When many instances of a service fail at the same time (e.g. because a shared resource briefly went away) they are all restarted in lockstep, creating a thundering herd problem. So this commit adds a simple `RestartRandomizedDelaySec=` service option which is similar to the timer `RandomizedDelaySec=` and adds a randomized restart delay.
This commit is contained in:
committed by
Lennart Poettering
parent
23b0bd230b
commit
046de3caea
@@ -2695,6 +2695,7 @@ static const BusProperty service_properties[] = {
|
||||
{ "GuessMainPID", bus_append_parse_boolean },
|
||||
{ "RestartSec", bus_append_parse_sec_rename },
|
||||
{ "RestartMaxDelaySec", bus_append_parse_sec_rename },
|
||||
{ "RestartRandomizedDelaySec", bus_append_parse_sec_rename },
|
||||
{ "TimeoutStartSec", bus_append_parse_sec_rename },
|
||||
{ "TimeoutStopSec", bus_append_parse_sec_rename },
|
||||
{ "TimeoutAbortSec", bus_append_parse_sec_rename },
|
||||
|
||||
@@ -1429,6 +1429,8 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE(
|
||||
SD_VARLINK_DEFINE_FIELD(RestartSteps, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
|
||||
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.service.html#RestartMaxDelaySec="),
|
||||
SD_VARLINK_DEFINE_FIELD(RestartMaxDelayUSec, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
|
||||
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.service.html#RestartRandomizedDelaySec="),
|
||||
SD_VARLINK_DEFINE_FIELD(RestartRandomizedDelayUSec, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
|
||||
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.service.html#TimeoutStartSec="),
|
||||
SD_VARLINK_DEFINE_FIELD(TimeoutStartUSec, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
|
||||
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.service.html#TimeoutStopSec="),
|
||||
|
||||
Reference in New Issue
Block a user