From c016844a33cd5739bd47cccb642c268acee171ae Mon Sep 17 00:00:00 2001 From: user Date: Sun, 15 Feb 2026 03:46:18 +0100 Subject: [PATCH] fix: handle SIGTERM gracefully for clean container shutdown Register signal handler on the event loop to stop the server on SIGTERM/SIGINT instead of relying on serve_forever(). --- src/s5p/server.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/s5p/server.py b/src/s5p/server.py index 2a28d08..ec20358 100644 --- a/src/s5p/server.py +++ b/src/s5p/server.py @@ -4,6 +4,7 @@ from __future__ import annotations import asyncio import logging +import signal import struct import time @@ -231,5 +232,12 @@ async def serve(config: Config) -> None: else: logger.info(" mode: direct (no chain)") + loop = asyncio.get_running_loop() + stop = loop.create_future() + + for sig in (signal.SIGTERM, signal.SIGINT): + loop.add_signal_handler(sig, lambda s=sig: stop.set_result(s)) + async with srv: - await srv.serve_forever() + sig = await stop + logger.info("received %s, shutting down", signal.Signals(sig).name)