diff --git a/src/main.rs b/src/main.rs index 977f4d6..42be8b3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -27,8 +27,36 @@ fn main() { let addr: SocketAddr = ([0, 0, 0, 0], 3000).into(); tracing::debug!("binding to {addr:?}"); let listener = tokio::net::TcpListener::bind(&addr).await.unwrap(); - axum::serve(listener, app).await.unwrap(); + axum::serve(listener, app) + .with_graceful_shutdown(graceful_shutdown()) + .await + .unwrap() }); rt.block_on(pool.close()); } + +async fn graceful_shutdown() { + use tokio::signal; + let ctrl_c = async { + signal::ctrl_c() + .await + .expect("failed to install Ctrl+C handler"); + }; + + #[cfg(unix)] + let terminate = async { + signal::unix::signal(signal::unix::SignalKind::terminate()) + .expect("failed to install signal handler") + .recv() + .await; + }; + + #[cfg(not(unix))] + let terminate = std::future::pending::<()>(); + + tokio::select! { + _ = ctrl_c => {tracing::info!("shutting down")}, + _ = terminate => {}, + } +}