Listen to SIGTERM in addition to ctrl-c for graceful shutdown

Antonio Scandurra created

Change summary

crates/collab/k8s/environments/preview.sh |  2 +-
crates/collab/src/main.rs                 | 11 +++++++++--
2 files changed, 10 insertions(+), 3 deletions(-)

Detailed changes

crates/collab/src/main.rs 🔗

@@ -7,6 +7,7 @@ use std::{
     net::{SocketAddr, TcpListener},
     path::Path,
 };
+use tokio::signal::unix::SignalKind;
 use tracing_log::LogTracer;
 use tracing_subscriber::{filter::EnvFilter, fmt::format::JsonFields, Layer};
 use util::ResultExt;
@@ -66,9 +67,15 @@ async fn main() -> Result<()> {
             axum::Server::from_tcp(listener)?
                 .serve(app.into_make_service_with_connect_info::<SocketAddr>())
                 .with_graceful_shutdown(async move {
-                    tokio::signal::ctrl_c()
-                        .await
+                    let mut sigterm = tokio::signal::unix::signal(SignalKind::terminate())
                         .expect("failed to listen for interrupt signal");
+                    let mut sigint = tokio::signal::unix::signal(SignalKind::interrupt())
+                        .expect("failed to listen for interrupt signal");
+                    let sigterm = sigterm.recv();
+                    let sigint = sigint.recv();
+                    futures::pin_mut!(sigterm);
+                    futures::pin_mut!(sigint);
+                    futures::future::select(sigterm, sigint).await;
                     tracing::info!("Received interrupt signal");
                     rpc_server.teardown();
                 })