chore: sync local latest state and repository cleanup
This commit is contained in:
60
scripts/e2e_watchdog.sh
Executable file
60
scripts/e2e_watchdog.sh
Executable file
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
PROJECT_DIR="/home/long/project/蚊子"
|
||||
STATE_DIR="$PROJECT_DIR/logs/e2e-automation"
|
||||
PID_FILE="$STATE_DIR/runner.pid"
|
||||
WATCHDOG_LOG="$STATE_DIR/watchdog.log"
|
||||
RUNNER="$PROJECT_DIR/scripts/e2e_continuous_runner.sh"
|
||||
CONTRACT_CHECK="$PROJECT_DIR/scripts/validate_test_contracts.sh"
|
||||
|
||||
mkdir -p "$STATE_DIR"
|
||||
|
||||
log() {
|
||||
echo "[$(date '+%F %T')] $*" >> "$WATCHDOG_LOG"
|
||||
}
|
||||
|
||||
if [ ! -x "$CONTRACT_CHECK" ]; then
|
||||
log "data-contract checker missing: $CONTRACT_CHECK"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if ! SPRING_PROFILES_ACTIVE="${SPRING_PROFILES_ACTIVE:-e2e}" "$CONTRACT_CHECK" "$PROJECT_DIR" preflight >> "$WATCHDOG_LOG" 2>&1; then
|
||||
log "data-contract preflight failed; watchdog will not start/restart runner"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if [ -f "$STATE_DIR/done.flag" ]; then
|
||||
log "done flag exists, watchdog idle"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ -f "$PID_FILE" ]; then
|
||||
pid="$(cat "$PID_FILE" || true)"
|
||||
if [ -n "${pid:-}" ] && kill -0 "$pid" 2>/dev/null; then
|
||||
latest_log="$(ls -1t "$STATE_DIR"/run_*.log 2>/dev/null | head -n1 || true)"
|
||||
if [ -n "$latest_log" ]; then
|
||||
now=$(date +%s)
|
||||
mtime=$(stat -c %Y "$latest_log" 2>/dev/null || echo "$now")
|
||||
idle=$((now - mtime))
|
||||
if [ "$idle" -gt 1800 ]; then
|
||||
log "runner appears stuck (idle ${idle}s), restarting pid=$pid"
|
||||
kill "$pid" 2>/dev/null || true
|
||||
sleep 2
|
||||
else
|
||||
log "runner healthy pid=$pid idle=${idle}s"
|
||||
exit 0
|
||||
fi
|
||||
else
|
||||
log "runner pid=$pid, no run log yet"
|
||||
exit 0
|
||||
fi
|
||||
else
|
||||
log "stale pid file or process gone"
|
||||
fi
|
||||
fi
|
||||
|
||||
nohup "$RUNNER" > "$STATE_DIR/nohup.out" 2>&1 &
|
||||
new_pid=$!
|
||||
echo "$new_pid" > "$PID_FILE"
|
||||
log "runner started pid=$new_pid"
|
||||
Reference in New Issue
Block a user