use tokio_util::sync::CancellationToken;
pub fn shutdown_signal(token: CancellationToken) {
tokio::spawn(async move {
#[cfg(unix)]
{
use tokio::signal::unix::{SignalKind, signal};
let mut sigterm =
signal(SignalKind::terminate()).expect("failed to install SIGTERM handler");
let mut sigint =
signal(SignalKind::interrupt()).expect("failed to install SIGINT handler");
tokio::select! {
_ = sigterm.recv() => {},
_ = sigint.recv() => {},
}
}
#[cfg(not(unix))]
{
tokio::signal::ctrl_c()
.await
.expect("failed to install Ctrl+C handler");
}
tracing::info!("Shutdown signal received, initiating graceful shutdown");
token.cancel();
});
}