mirror of
https://github.com/nolen777/eagle0.git
synced 2026-07-28 21:35:42 +00:00
Useful when Eagle needs to reload game state from persistence (e.g., after a rewind) without a full blue-green deployment. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
74 lines
2.1 KiB
Bash
Executable File
74 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Restart the active Eagle instance.
|
|
# Reads the active instance from /opt/eagle0/.active-instance (set by deploy-blue-green.sh).
|
|
#
|
|
# This is useful when you need Eagle to reload game state from persistence
|
|
# (e.g., after a rewind) without doing a full blue-green deployment.
|
|
#
|
|
# Usage:
|
|
# eagle-restart # Restart active instance, wait for healthy
|
|
# eagle-restart --no-wait # Restart without waiting for health check
|
|
#
|
|
# To create an alias, add to ~/.bashrc:
|
|
# alias eagle-restart='/opt/eagle0/scripts/eagle-restart.sh'
|
|
#
|
|
|
|
set -euo pipefail
|
|
|
|
APP_DIR="${APP_DIR:-/opt/eagle0}"
|
|
ACTIVE_FILE="${APP_DIR}/.active-instance"
|
|
HEALTH_TIMEOUT=120 # seconds
|
|
|
|
# Read active instance from file, with fallback
|
|
if [ -f "$ACTIVE_FILE" ]; then
|
|
ACTIVE=$(cat "$ACTIVE_FILE")
|
|
else
|
|
# Fallback: check which container is actually running
|
|
if docker inspect --format='{{.State.Running}}' eagle-blue 2>/dev/null | grep -q true; then
|
|
ACTIVE="eagle-blue"
|
|
elif docker inspect --format='{{.State.Running}}' eagle-green 2>/dev/null | grep -q true; then
|
|
ACTIVE="eagle-green"
|
|
else
|
|
ACTIVE=""
|
|
fi
|
|
fi
|
|
|
|
if [ -z "$ACTIVE" ]; then
|
|
echo "Error: No active Eagle instance found" >&2
|
|
exit 1
|
|
fi
|
|
|
|
NO_WAIT=false
|
|
if [ "${1:-}" = "--no-wait" ]; then
|
|
NO_WAIT=true
|
|
fi
|
|
|
|
echo "Restarting ${ACTIVE}..."
|
|
docker restart "$ACTIVE"
|
|
|
|
if [ "$NO_WAIT" = true ]; then
|
|
echo "Restart initiated. Not waiting for health check."
|
|
exit 0
|
|
fi
|
|
|
|
echo "Waiting for ${ACTIVE} to become healthy (timeout: ${HEALTH_TIMEOUT}s)..."
|
|
elapsed=0
|
|
while [ $elapsed -lt $HEALTH_TIMEOUT ]; do
|
|
health=$(docker inspect --format='{{.State.Health.Status}}' "$ACTIVE" 2>/dev/null || echo "unknown")
|
|
if [ "$health" = "healthy" ]; then
|
|
echo "${ACTIVE} is healthy after ${elapsed}s."
|
|
exit 0
|
|
fi
|
|
sleep 2
|
|
elapsed=$((elapsed + 2))
|
|
# Print progress every 10 seconds
|
|
if [ $((elapsed % 10)) -eq 0 ]; then
|
|
echo " ...${elapsed}s (status: ${health})"
|
|
fi
|
|
done
|
|
|
|
echo "Warning: ${ACTIVE} did not become healthy within ${HEALTH_TIMEOUT}s (status: ${health})" >&2
|
|
echo "Check logs with: eagle-logs" >&2
|
|
exit 1
|