upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2026-02-03 22:22:53 +0000
committerDanConwayDev <DanConwayDev@protonmail.com>2026-02-03 22:22:53 +0000
commite0ad39a489b3398f8208713bf728db0cb11475b0 (patch)
tree34f9ce47908985259a2a24efa2468e9743b94e2f /src/main.rs
parent61e9b8a111f932d2753c18c8435b74e01ae4a2e3 (diff)
Handle SIGTERM for graceful shutdown with systemd
Listen for both SIGINT (Ctrl+C) and SIGTERM (systemd) signals to ensure graceful shutdown cleanup runs when stopping the service via systemd. Previously, only SIGINT was handled, causing purgatory state and rejected events cache to be lost on every systemd restart. Now both signals trigger the cleanup code that saves state files and removes placeholder refs. Fixes issue 0f73
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs49
1 files changed, 38 insertions, 11 deletions
diff --git a/src/main.rs b/src/main.rs
index 6c9da05..dd2c903 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -207,18 +207,45 @@ async fn main() -> Result<()> {
207 info!("Starting HTTP server on {}", config.bind_address); 207 info!("Starting HTTP server on {}", config.bind_address);
208 208
209 // Run server until shutdown signal, then cleanup 209 // Run server until shutdown signal, then cleanup
210 tokio::select! { 210 #[cfg(unix)]
211 result = http::run_server( 211 {
212 config, 212 use tokio::signal::unix::{signal, SignalKind};
213 relay_with_db.relay, 213 let mut sigterm = signal(SignalKind::terminate())?;
214 relay_with_db.database, 214
215 metrics, 215 tokio::select! {
216 purgatory, 216 result = http::run_server(
217 ) => { 217 config,
218 result? 218 relay_with_db.relay,
219 relay_with_db.database,
220 metrics,
221 purgatory,
222 ) => {
223 result?
224 }
225 _ = signal::ctrl_c() => {
226 info!("Received SIGINT (Ctrl+C), cleaning up...");
227 }
228 _ = sigterm.recv() => {
229 info!("Received SIGTERM, cleaning up...");
230 }
219 } 231 }
220 _ = signal::ctrl_c() => { 232 }
221 info!("Received shutdown signal, cleaning up..."); 233
234 #[cfg(not(unix))]
235 {
236 tokio::select! {
237 result = http::run_server(
238 config,
239 relay_with_db.relay,
240 relay_with_db.database,
241 metrics,
242 purgatory,
243 ) => {
244 result?
245 }
246 _ = signal::ctrl_c() => {
247 info!("Received SIGINT (Ctrl+C), cleaning up...");
248 }
222 } 249 }
223 } 250 }
224 251