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:
parent
9b0f2a16ca
commit
62ba69a29d
2 changed files with 15 additions and 5 deletions
|
|
@ -612,11 +612,13 @@ class GatewayRunner:
|
||||||
return response
|
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.
|
Start the gateway and run until interrupted.
|
||||||
|
|
||||||
This is the main entry point for running the gateway.
|
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)
|
runner = GatewayRunner(config)
|
||||||
|
|
||||||
|
|
@ -635,10 +637,11 @@ async def start_gateway(config: Optional[GatewayConfig] = None) -> None:
|
||||||
# Start the gateway
|
# Start the gateway
|
||||||
success = await runner.start()
|
success = await runner.start()
|
||||||
if not success:
|
if not success:
|
||||||
return
|
return False
|
||||||
|
|
||||||
# Wait for shutdown
|
# Wait for shutdown
|
||||||
await runner.wait_for_shutdown()
|
await runner.wait_for_shutdown()
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
@ -658,8 +661,11 @@ def main():
|
||||||
data = json.load(f)
|
data = json.load(f)
|
||||||
config = GatewayConfig.from_dict(data)
|
config = GatewayConfig.from_dict(data)
|
||||||
|
|
||||||
# Run the gateway
|
# Run the gateway - exit with code 1 if no platforms connected,
|
||||||
asyncio.run(start_gateway(config))
|
# 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__":
|
if __name__ == "__main__":
|
||||||
|
|
|
||||||
|
|
@ -360,7 +360,11 @@ def run_gateway(verbose: bool = False):
|
||||||
print("└─────────────────────────────────────────────────────────┘")
|
print("└─────────────────────────────────────────────────────────┘")
|
||||||
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)
|
||||||
|
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue