diff --git a/web3_proxy/src/sub_commands/proxyd.rs b/web3_proxy/src/sub_commands/proxyd.rs index f14f3fb7..39a1793c 100644 --- a/web3_proxy/src/sub_commands/proxyd.rs +++ b/web3_proxy/src/sub_commands/proxyd.rs @@ -12,9 +12,10 @@ use std::sync::atomic::AtomicU16; use std::sync::Arc; use std::time::Duration; use std::{fs, thread}; -use tokio::select; +use tokio::signal::unix::SignalKind; use tokio::sync::{broadcast, mpsc, oneshot}; use tokio::time::{sleep_until, Instant}; +use tokio::{select, signal}; use tracing::{error, info, trace, warn}; /// start the main proxy daemon @@ -140,6 +141,7 @@ impl ProxydSubCommand { } } + // TODO: wait for SIGHUP instead? thread::sleep(Duration::from_secs(10)); }); } @@ -188,6 +190,8 @@ impl ProxydSubCommand { let frontend_handle = flatten_handle(frontend_handle); + let mut terminate_stream = signal::unix::signal(SignalKind::terminate())?; + // if everything is working, these should all run forever let mut exited_with_err = false; let mut frontend_exited = false; @@ -231,6 +235,16 @@ impl ProxydSubCommand { } } } + x = terminate_stream.recv() => { + match x { + Some(_) => info!("quiting from SIGTERM"), + None => { + // TODO: i don't think this is possible + error!("error quiting from SIGTERM"); + exited_with_err = true; + } + } + } // TODO: This seems to have been removed on the main branch // TODO: how can we properly watch background handles here? this returns None immediatly and the app exits. i think the bug is somewhere else though x = spawned_app.background_handles.next() => {