#!/bin/sh # Probe IB Gateway and restart it when it stays unable to serve account requests. # Gateway can lose IBKR's servers, fail the reconnect and sit on an error dialog # with its API port still open (2026-09-29, for 9 hours): every request times # out, yet java keeps running, so systemd's Restart= never fires. # Runs before each job (ExecStartPre=make gateway) and by hand as `make gateway`. cd "$(dirname "$0")/.." || exit 1 probe() { uv run ibkr-quant gateway; } probe && exit 0 # Gateway rides out short outages by reconnecting on its own; give it a minute. sleep 60 probe && exit 0 echo "restarting ibgateway.service" >&2 systemctl --user restart ibgateway.service || exit 1 # IBC logged in 28 s after a restart on 2026-09-29; leave room for a slow proxy. deadline=$(($(date +%s) + 300)) while [ "$(date +%s)" -lt "$deadline" ]; do sleep 20 probe && exit 0 done echo "IB Gateway still not serving requests 5 min after the restart" >&2 exit 1