diff --git a/TODO b/TODO
index 41ef141af0..33cc02d406 100644
--- a/TODO
+++ b/TODO
@@ -2850,3 +2850,6 @@ Features:
* shared/wall: Once more programs are taught to prefer sd-login over utmp,
switch the default wall implementation to wall_logind
(https://github.com/systemd/systemd/pull/29051#issuecomment-1704917074)
+
+* Hook up systemd-journal-upload with RESTART_RESET=1 logic (should probably
+ be conditioned on the num of successfully uploaded entries?)
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 12b367ccc8..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. */
@@ -5131,8 +5142,6 @@ static void service_reset_failed(Unit *u) {
s->live_mount_result = SERVICE_SUCCESS;
s->clean_result = SERVICE_SUCCESS;
s->n_restarts = 0;
-
- (void) unit_set_debug_invocation(u, /* enable= */ false);
}
static PidRef* service_main_pid(Unit *u, bool *ret_is_alien) {
diff --git a/src/core/unit.c b/src/core/unit.c
index b784342c08..781de8d594 100644
--- a/src/core/unit.c
+++ b/src/core/unit.c
@@ -3867,7 +3867,8 @@ void unit_reset_failed(Unit *u) {
ratelimit_reset(&u->start_ratelimit);
u->start_limit_hit = false;
- u->debug_invocation = false;
+
+ (void) unit_set_debug_invocation(u, /* enable= */ false);
}
Unit *unit_following(Unit *u) {