diff --git a/src/core/main.c b/src/core/main.c index c833050db0a..94055f08de9 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -1961,6 +1961,8 @@ static int invoke_main_loop( LogTarget saved_log_target; int saved_log_level; + manager_send_reloading(m); + log_info("Reloading."); /* First, save any overridden log level/target, then parse the configuration file, @@ -1991,6 +1993,10 @@ static int invoke_main_loop( } case MANAGER_REEXECUTE: + + manager_send_reloading(m); /* From the perspective of the manager calling us this is + * pretty much the same as a reload */ + r = prepare_reexecute(m, &arg_serialization, ret_fds, false); if (r < 0) { *ret_error_message = "Failed to prepare for reexecution"; @@ -2005,6 +2011,10 @@ static int invoke_main_loop( return objective; case MANAGER_SWITCH_ROOT: + + manager_send_reloading(m); /* From the perspective of the manager calling us this is + * pretty much the same as a reload */ + manager_set_switching_root(m, true); if (!m->switch_root_init) { diff --git a/src/core/manager.c b/src/core/manager.c index 0aed7de15c7..f8576cca1ae 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -3648,6 +3648,18 @@ void manager_check_finished(Manager *m) { manager_invalidate_startup_units(m); } +void manager_send_reloading(Manager *m) { + assert(m); + + /* Let whoever invoked us know that we are now reloading */ + (void) sd_notifyf(/* unset= */ false, + "RELOADING=1\n" + "MONOTONIC_USEC=" USEC_FMT "\n", now(CLOCK_MONOTONIC)); + + /* And ensure that we'll send READY=1 again as soon as we are ready again */ + m->ready_sent = false; +} + static bool generator_path_any(const char* const* paths) { bool found = false; diff --git a/src/core/manager.h b/src/core/manager.h index 4d4b56c3cc0..c13de8fe78f 100644 --- a/src/core/manager.h +++ b/src/core/manager.h @@ -538,6 +538,7 @@ void manager_send_unit_plymouth(Manager *m, Unit *u); bool manager_unit_inactive_or_pending(Manager *m, const char *name); void manager_check_finished(Manager *m); +void manager_send_reloading(Manager *m); void disable_printk_ratelimit(void); void manager_recheck_dbus(Manager *m); diff --git a/units/user@.service.in b/units/user@.service.in index 1660de03264..15587649094 100644 --- a/units/user@.service.in +++ b/units/user@.service.in @@ -17,7 +17,7 @@ IgnoreOnIsolate=yes [Service] User=%i PAMName=systemd-user -Type=notify +Type=notify-reload ExecStart={{ROOTLIBEXECDIR}}/systemd --user Slice=user-%i.slice KillMode=mixed