diff --git a/magic-nix-cache/src/main.rs b/magic-nix-cache/src/main.rs index 39386ae..fb97e3c 100644 --- a/magic-nix-cache/src/main.rs +++ b/magic-nix-cache/src/main.rs @@ -26,6 +26,7 @@ use std::io::Write; use std::net::SocketAddr; use std::os::unix::fs::PermissionsExt; use std::path::{Path, PathBuf}; +use std::process::exit; use std::sync::Arc; use ::attic::nix_store::NixStore; @@ -370,6 +371,21 @@ async fn main_cli() -> Result<()> { tracing::info!("Listening on {}", args.listen); + let server = axum::Server::bind(&args.listen) + .serve(app.into_make_service()) + .with_graceful_shutdown(async move { + shutdown_receiver.await.ok(); + tracing::info!("Shutting down"); + }); + + // Spawn here so that post-startup tasks can proceed + tokio::spawn(async move { + if let Err(e) = server.await { + tracing::error!("failed to start up daemon: {e}"); + exit(1); + } + }); + // Notify of startup via HTTP if let Some(startup_notification_url) = args.startup_notification_url { tracing::debug!("Startup notification via HTTP POST to {startup_notification_url}"); @@ -411,20 +427,11 @@ async fn main_cli() -> Result<()> { tracing::debug!("Created startup notification file at {startup_notification_file_path:?}"); } - let ret = axum::Server::bind(&args.listen) - .serve(app.into_make_service()) - .with_graceful_shutdown(async move { - shutdown_receiver.await.ok(); - tracing::info!("Shutting down"); - }) - .await; - + // Notify diagnostics endpoint if let Some(diagnostic_endpoint) = diagnostic_endpoint { state.metrics.send(diagnostic_endpoint).await; } - ret?; - Ok(()) }