diff options
| author | tv <tv@krebsco.de> | 2026-10-21 14:15:55 +0200 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-10-21 14:15:55 +0200 |
| commit | 4047c38c5230fd7035f9f60a711a824d63a9636a (patch) | |
| tree | e03ab8d9da2ed7998636cc31e33efd317176a971 /src | |
| parent | a2815e3eec7f080ae44e7b43ba697bd0cc13da08 (diff) | |
handle SIGTERM
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 11 |
1 files changed, 11 insertions, 0 deletions
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"); |
