autotrain/scripts/web_ui_watchdog.sh
xinxin6623 137eaed2af feat: improve web ui automation runner
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-12 00:42:20 +08:00

46 lines
1.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -uo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
PORT="${WEB_UI_PORT:-8765}"
LOG_FILE="$ROOT_DIR/work/web_ui.log"
SERVER_PID_FILE="$ROOT_DIR/work/web_ui.pid"
WATCHDOG_PID_FILE="$ROOT_DIR/work/web_ui_watchdog.pid"
mkdir -p "$ROOT_DIR/work"
echo $$ > "$WATCHDOG_PID_FILE"
cd "$ROOT_DIR"
start_server() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [watchdog] starting web_ui.py" >> "$LOG_FILE"
python3 -u scripts/web_ui.py >> "$LOG_FILE" 2>&1 &
echo "$!" > "$SERVER_PID_FILE"
}
stop_server() {
if [[ -f "$SERVER_PID_FILE" ]]; then
local pid
pid="$(cat "$SERVER_PID_FILE" 2>/dev/null || true)"
if [[ -n "$pid" ]] && kill -0 "$pid" 2>/dev/null; then
kill "$pid" 2>/dev/null || true
fi
fi
}
trap 'stop_server; rm -f "$WATCHDOG_PID_FILE"; exit 0' INT TERM EXIT
while true; do
if ! curl -fsS --max-time 2 "http://127.0.0.1:$PORT/" >/dev/null 2>&1; then
pids="$(lsof -tiTCP:"$PORT" -sTCP:LISTEN 2>/dev/null || true)"
if [[ -n "$pids" ]]; then
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [watchdog] clearing stale listener: $pids" >> "$LOG_FILE"
kill $pids 2>/dev/null || true
sleep 1
fi
start_server || true
sleep 2
fi
sleep 5
done