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().
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user