diff --git a/man/sd_notify.xml b/man/sd_notify.xml
index c017f48487..746789e955 100644
--- a/man/sd_notify.xml
+++ b/man/sd_notify.xml
@@ -333,7 +333,7 @@
systemd.service5
for information how to enable this functionality and
sd_watchdog_enabled3
- for the details of how the service can check whether the watchdog is enabled.
+ for the details of how the service can check whether the watchdog is enabled.
@@ -345,7 +345,7 @@
in time. Note that WatchdogSec= does not need to be enabled for
WATCHDOG=trigger to trigger the watchdog action. See
systemd.service5
- for information about the watchdog behavior.
+ for information about the watchdog behavior.
@@ -376,6 +376,18 @@
+
+ RESTART_RESET=1
+
+ Reset the restart counter of the service, which has the effect of restoring
+ the restart duration to RestartSec= if RestartSteps= and
+ RestartMaxDelaySec= are in use. For more information, refer to
+ systemd.service5.
+
+
+
+
+
FDSTORE=1
diff --git a/src/core/service.c b/src/core/service.c
index 4bad026537..ccfa439dd0 100644
--- a/src/core/service.c
+++ b/src/core/service.c
@@ -4861,6 +4861,17 @@ static void service_notify_message(
service_override_watchdog_timeout(s, watchdog_override_usec);
}
+ /* Interpret RESTART_RESET=1 */
+ if (strv_contains(tags, "RESTART_RESET=1") && IN_SET(s->state, SERVICE_RUNNING, SERVICE_STOP)) {
+ log_unit_struct(u, LOG_NOTICE,
+ LOG_UNIT_MESSAGE(u, "Got RESTART_RESET=1, resetting restart counter from %u.", s->n_restarts),
+ "N_RESTARTS=0",
+ LOG_UNIT_INVOCATION_ID(u));
+
+ s->n_restarts = 0;
+ notify_dbus = true;
+ }
+
/* Process FD store messages. Either FDSTOREREMOVE=1 for removal, or FDSTORE=1 for addition. In both cases,
* process FDNAME= for picking the file descriptor name to use. Note that FDNAME= is required when removing
* fds, but optional when pushing in new fds, for compatibility reasons. */