@@ -92,11 +92,22 @@ impl<C: LoadConfig> ServerRunner<C> {
9292 mut server,
9393 context,
9494 } = self ;
95-
9695 // Init the adapter server (e.g. create underlying HTTP server)
9796 server. init ( & context) . await ?;
9897 log:: info!( "Draco successfully initialized." ) ;
9998
99+ #[ cfg( unix) ]
100+ let sigterm = async {
101+ use tokio:: signal:: unix:: { SignalKind , signal} ;
102+
103+ let mut term =
104+ signal ( SignalKind :: terminate ( ) ) . expect ( "failed to install SIGTERM handler" ) ;
105+ term. recv ( ) . await ;
106+ } ;
107+
108+ #[ cfg( not( unix) ) ]
109+ let sigterm = std:: future:: pending :: < ( ) > ( ) ;
110+
100111 match health_task {
101112 Some ( mut ht) => {
102113 tokio:: select! {
@@ -113,28 +124,36 @@ impl<C: LoadConfig> ServerRunner<C> {
113124 server. shutdown( & context) . await ?;
114125 }
115126
116- // Ctrl+C / SIGINT
127+ // Ctrl+C
117128 _ = signal:: ctrl_c( ) => {
118129 log:: info!( "Ctrl+C/Exit signal received, shutting down adapter" ) ;
119130 server. shutdown( & context) . await ?;
120131 ht. abort( ) ;
121132 }
133+ _ = sigterm => {
134+ log:: info!( "SIGTERM received, shutting down adapter" ) ;
135+ server. shutdown( & context) . await ?;
136+ ht. abort( ) ;
137+ }
122138 }
123139 }
124-
125140 None => {
126141 tokio:: select! {
127- // Adapter server loop ends on its own
128- res = server. run( & context) => {
129- log:: warn!( "Adapter server finished" ) ;
130- res?;
131- }
132-
133- // Ctrl+C / SIGINT
134- _ = signal:: ctrl_c( ) => {
135- log:: info!( "Ctrl+C/Exit signal received, shutting down adapter" ) ;
136- server. shutdown( & context) . await ?;
137- }
142+ // Adapter server loop ends on its own
143+ res = server. run( & context) => {
144+ log:: warn!( "Adapter server finished" ) ;
145+ res?;
146+ }
147+
148+ // Ctrl+C
149+ _ = signal:: ctrl_c( ) => {
150+ log:: info!( "Ctrl+C/Exit signal received, shutting down adapter" ) ;
151+ server. shutdown( & context) . await ?;
152+ }
153+ _ = sigterm => {
154+ log:: info!( "SIGTERM received, shutting down adapter" ) ;
155+ server. shutdown( & context) . await ?;
156+ }
138157 }
139158 }
140159 }
0 commit comments