Add config reload via SIGHUP
This commit is contained in:
@@ -461,14 +461,39 @@ def run_daemon(app):
|
||||
expired_cleanup_thread = ExpiredRecordsCleanupThread(app)
|
||||
expired_cleanup_thread.start()
|
||||
|
||||
|
||||
# Setup signal handlers
|
||||
def signal_handler(signum, frame):
|
||||
logging.info(f"Signal received: {signum}, shutting down")
|
||||
app.signal_shutdown()
|
||||
|
||||
def sighup_handler(signum, frame):
|
||||
logging.info("SIGHUP received, reloading configuration")
|
||||
try:
|
||||
app.reload_config()
|
||||
|
||||
# Update server attributes
|
||||
server.proxy_header = app.config["daemon"].get("proxy_header", "")
|
||||
server.trusted_networks = _parse_trusted_proxies(
|
||||
app.config["daemon"].get("trusted_proxies", [])
|
||||
)
|
||||
|
||||
# Reload SSL if enabled
|
||||
if app.config["daemon"]["ssl"]:
|
||||
new_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
|
||||
new_context.load_cert_chain(
|
||||
app.config["daemon"]["ssl_cert_file"],
|
||||
app.config["daemon"]["ssl_key_file"]
|
||||
)
|
||||
# Note: existing connections use old cert, new connections use new
|
||||
server.socket = new_context.wrap_socket(
|
||||
server.socket.detach(), server_side=True
|
||||
)
|
||||
except Exception as e:
|
||||
logging.error(f"Config reload failed: {e}")
|
||||
|
||||
signal.signal(signal.SIGTERM, signal_handler)
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
signal.signal(signal.SIGHUP, sighup_handler)
|
||||
|
||||
paths = ", ".join(ep["path"] for ep in config["endpoints"])
|
||||
logging.info(f"Daemon started: {proto}://{host}:{port} endpoints=[{paths}]")
|
||||
|
||||
Reference in New Issue
Block a user