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.
This commit is contained in:
teknium1
2026-02-10 16:01:00 -08:00
parent 9b0f2a16ca
commit 62ba69a29d
2 changed files with 15 additions and 5 deletions

View File

@@ -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__":

View File

@@ -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)
# =============================================================================