juicehost/
utils.rs

1//! Graceful-shutdown signal handling.
2
3use tokio::signal;
4
5/// Wait for Ctrl+C or SIGTERM and return.
6pub async fn shutdown_signal() {
7    let ctrl_c = async {
8        signal::ctrl_c()
9            .await
10            .expect("Failed to install Ctrl+C handler");
11    };
12
13    #[cfg(unix)]
14    let terminate = async {
15        signal::unix::signal(signal::unix::SignalKind::terminate())
16            .expect("Failed to install signal handler")
17            .recv()
18            .await;
19    };
20
21    #[cfg(not(unix))]
22    let terminate = std::future::pending::<()>();
23
24    tokio::select! {
25        _ = ctrl_c => {
26            tracing::info!("juicehost shutting down...");
27        },
28        _ = terminate => {
29            tracing::info!("juicehost terminated...");
30        },
31    }
32}