add more systemd notify integration with stopping/reloading/ready states

Signed-off-by: strawberry <strawberry@puppygock.gay>
This commit is contained in:
strawberry 2025-02-05 01:45:21 -05:00 committed by Jason Volk
parent f6dfc9538f
commit fda8b36809
3 changed files with 18 additions and 6 deletions

View file

@ -69,6 +69,10 @@ impl Server {
return Err!("Reloading not enabled");
}
#[cfg(all(feature = "systemd", target_os = "linux"))]
sd_notify::notify(true, &[sd_notify::NotifyState::Reloading])
.expect("failed to notify systemd of reloading state");
if self.reloading.swap(true, Ordering::AcqRel) {
return Err!("Reloading already in progress");
}
@ -83,7 +87,7 @@ impl Server {
})
}
pub fn restart(&self) -> Result<()> {
pub fn restart(&self) -> Result {
if self.restarting.swap(true, Ordering::AcqRel) {
return Err!("Restart already in progress");
}
@ -93,7 +97,11 @@ impl Server {
})
}
pub fn shutdown(&self) -> Result<()> {
pub fn shutdown(&self) -> Result {
#[cfg(all(feature = "systemd", target_os = "linux"))]
sd_notify::notify(true, &[sd_notify::NotifyState::Stopping])
.expect("failed to notify systemd of stopping state");
if self.stopping.swap(true, Ordering::AcqRel) {
return Err!("Shutdown already in progress");
}

View file

@ -100,10 +100,6 @@ pub(crate) async fn stop(services: Arc<Services>) -> Result<()> {
);
}
#[cfg(all(feature = "systemd", target_os = "linux"))]
sd_notify::notify(true, &[sd_notify::NotifyState::Stopping])
.expect("failed to notify systemd of stopping state");
info!("Shutdown complete.");
Ok(())
}

View file

@ -43,7 +43,15 @@ impl Deref for Service {
#[implement(Service)]
fn handle_reload(&self) -> Result {
if self.server.config.config_reload_signal {
#[cfg(all(feature = "systemd", target_os = "linux"))]
sd_notify::notify(true, &[sd_notify::NotifyState::Reloading])
.expect("failed to notify systemd of reloading state");
self.reload(iter::empty())?;
#[cfg(all(feature = "systemd", target_os = "linux"))]
sd_notify::notify(true, &[sd_notify::NotifyState::Ready])
.expect("failed to notify systemd of ready state");
}
Ok(())