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 asyncio
|
||||||
import logging
|
import logging
|
||||||
|
import signal
|
||||||
import struct
|
import struct
|
||||||
import time
|
import time
|
||||||
|
|
||||||
@@ -231,5 +232,12 @@ async def serve(config: Config) -> None:
|
|||||||
else:
|
else:
|
||||||
logger.info(" mode: direct (no chain)")
|
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:
|
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