46 lines
1.2 KiB
Bash
Executable File
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
|