Shut down faster when receiving second SIGINT/SIGTERM
This commit is contained in:
parent
b8c3ce5d47
commit
5709a69694
1 changed files with 23 additions and 9 deletions
32
src/main.rs
32
src/main.rs
|
|
@ -5,13 +5,13 @@ mod somehow;
|
|||
mod state;
|
||||
mod web;
|
||||
|
||||
use std::{io, path::PathBuf};
|
||||
use std::{io, path::PathBuf, process};
|
||||
|
||||
use clap::Parser;
|
||||
use directories::ProjectDirs;
|
||||
use state::AppState;
|
||||
use tokio::{select, signal::unix::SignalKind};
|
||||
use tracing::{debug, info, Level};
|
||||
use tracing::{error, info, Level};
|
||||
use tracing_subscriber::{
|
||||
filter::Targets, prelude::__tracing_subscriber_SubscriberExt, util::SubscriberInitExt,
|
||||
};
|
||||
|
|
@ -78,8 +78,6 @@ fn load_config(path: Option<PathBuf>) -> somehow::Result<&'static Config> {
|
|||
}
|
||||
|
||||
async fn wait_for_signal() -> io::Result<()> {
|
||||
debug!("Listening to signals");
|
||||
|
||||
let mut sigint = tokio::signal::unix::signal(SignalKind::interrupt())?;
|
||||
let mut sigterm = tokio::signal::unix::signal(SignalKind::terminate())?;
|
||||
|
||||
|
|
@ -88,10 +86,23 @@ async fn wait_for_signal() -> io::Result<()> {
|
|||
_ = sigterm.recv() => "SIGTERM",
|
||||
};
|
||||
|
||||
info!("Received {signal}, shutting down");
|
||||
info!("Received signal ({signal}), shutting down gracefully");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn die_on_signal() -> io::Result<()> {
|
||||
let mut sigint = tokio::signal::unix::signal(SignalKind::interrupt())?;
|
||||
let mut sigterm = tokio::signal::unix::signal(SignalKind::terminate())?;
|
||||
|
||||
let signal = select! {
|
||||
_ = sigint.recv() => "SIGINT",
|
||||
_ = sigterm.recv() => "SIGTERM",
|
||||
};
|
||||
|
||||
error!("Received second signal ({signal}), dying immediately");
|
||||
process::exit(1);
|
||||
}
|
||||
|
||||
async fn run() -> somehow::Result<()> {
|
||||
let args = Args::parse();
|
||||
|
||||
|
|
@ -103,12 +114,15 @@ async fn run() -> somehow::Result<()> {
|
|||
|
||||
info!("Startup complete, running");
|
||||
select! {
|
||||
_ = wait_for_signal() => {},
|
||||
_ = web::run(state.clone()) => {},
|
||||
_ = recurring::run(state.clone()) => {},
|
||||
_ = wait_for_signal() => {}
|
||||
_ = web::run(state.clone()) => {}
|
||||
_ = recurring::run(state.clone()) => {}
|
||||
}
|
||||
|
||||
state.shut_down().await;
|
||||
select! {
|
||||
_ = die_on_signal() => {}
|
||||
_ = state.shut_down() => {}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue