From 4047c38c5230fd7035f9f60a711a824d63a9636a Mon Sep 17 00:00:00 2001 From: tv Date: Wed, 21 Oct 2026 14:15:55 +0200 Subject: handle SIGTERM --- src/main.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src') diff --git a/src/main.rs b/src/main.rs index ab91490..2b90bef 100644 --- a/src/main.rs +++ b/src/main.rs @@ -226,6 +226,9 @@ async fn main() -> Result<()> { let server_fut = server_builder.into_future(); tokio::pin!(server_fut); + let mut terminate = tokio::signal::unix::signal(tokio::signal::unix::SignalKind::terminate()) + .context("Installing the SIGTERM handler")?; + tokio::select! { exit_status = state.transport.wait_for_exit() => { error!("Mycelium runtime process exited. Status: {:?}", exit_status); @@ -247,6 +250,14 @@ async fn main() -> Result<()> { let _ = shutdown_tx.send(()); let _ = server_fut.as_mut().await; } + + // What service managers send; handled like Ctrl-C so the supervised Mycelium is + // stopped on the way out instead of relying on the kernel's parent-death signal. + _ = terminate.recv() => { + info!("Received termination signal. Shutting down..."); + let _ = shutdown_tx.send(()); + let _ = server_fut.as_mut().await; + } } info!("HTTP API server stopped"); -- cgit v1.3.1