From 62ba69a29d4e78635b4eb0c086e569c17bbbe800 Mon Sep 17 00:00:00 2001 From: teknium1 Date: Tue, 10 Feb 2026 16:01:00 -0800 Subject: [PATCH] Fix gateway exit code to enable systemd auto-restart on connection failure - Updated the start_gateway function to return a boolean indicating success or failure, allowing for better control over exit codes. - Modified the main function to handle gateway startup failures, ensuring systemd can automatically restart on transient errors. - Enhanced error handling in the hermes_cli gateway to exit with code 1 if the gateway fails to connect to any platform. --- gateway/run.py | 14 ++++++++++---- hermes_cli/gateway.py | 6 +++++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/gateway/run.py b/gateway/run.py index 2e126d59f..81c5dcf09 100644 --- a/gateway/run.py +++ b/gateway/run.py @@ -612,11 +612,13 @@ class GatewayRunner: return response -async def start_gateway(config: Optional[GatewayConfig] = None) -> None: +async def start_gateway(config: Optional[GatewayConfig] = None) -> bool: """ Start the gateway and run until interrupted. This is the main entry point for running the gateway. + Returns True if the gateway ran successfully, False if it failed to start. + A False return causes a non-zero exit code so systemd can auto-restart. """ runner = GatewayRunner(config) @@ -635,10 +637,11 @@ async def start_gateway(config: Optional[GatewayConfig] = None) -> None: # Start the gateway success = await runner.start() if not success: - return + return False # Wait for shutdown await runner.wait_for_shutdown() + return True def main(): @@ -658,8 +661,11 @@ def main(): data = json.load(f) config = GatewayConfig.from_dict(data) - # Run the gateway - asyncio.run(start_gateway(config)) + # Run the gateway - exit with code 1 if no platforms connected, + # so systemd Restart=on-failure will retry on transient errors (e.g. DNS) + success = asyncio.run(start_gateway(config)) + if not success: + sys.exit(1) if __name__ == "__main__": diff --git a/hermes_cli/gateway.py b/hermes_cli/gateway.py index 579ea5f1e..f36c21b86 100644 --- a/hermes_cli/gateway.py +++ b/hermes_cli/gateway.py @@ -360,7 +360,11 @@ def run_gateway(verbose: bool = False): print("└─────────────────────────────────────────────────────────┘") print() - asyncio.run(start_gateway()) + # Exit with code 1 if gateway fails to connect any platform, + # so systemd Restart=on-failure will retry on transient errors + success = asyncio.run(start_gateway()) + if not success: + sys.exit(1) # =============================================================================