#!/usr/bin/env bash # Start one team's full stack in the BACKGROUND (safe for a 16-challenge team: # `compose up` for 16 services takes minutes and would blow a foreground timeout). # Usage: start_team_bg.sh set -uo pipefail IDX="${1:?usage: start_team_bg.sh }" LOG="/tmp/start-team${IDX}.log" TEAMDIR="/opt/gemastik18-final/teams/team${IDX}" cd "${TEAMDIR}/services" || exit 1 { echo "=== $(date -Is) start team${IDX} ===" docker compose -p "team${IDX}" up -d --remove-orphans 2>&1 echo "compose rc=$?" # independent systemd receiver (never a child of the panel) python3 /opt/gemastik18-final/panel/gen_receiver_services.py start 2>&1 systemctl restart "gemastik-receiver-team${IDX}.service" 2>&1 echo "receiver: $(systemctl is-active gemastik-receiver-team${IDX}.service)" python3 - "$IDX" <<'PY' import sys, json, time sys.path.insert(0, '/opt/gemastik18-final/panel') import teams idx = int(sys.argv[1]) sf = f"/opt/gemastik18-final/teams/team{idx}/state.json" st = json.loads(open(sf).read()); st["status"] = "running" open(sf, "w").write(json.dumps(st, indent=2)) # retry loop: chpasswd races container boot teams.set_ssh_passwords(idx) print("=== done team", idx, "===") PY df -h / | tail -1 } >"${LOG}" 2>&1 echo "started team${IDX} -> ${LOG}"