#!/usr/bin/env bash set -euo pipefail export DISPLAY=:99 DATA_DIR="/app/data" REQ="${DATA_DIR}/.login_request.json" STATUS="${DATA_DIR}/.login_status.json" LOCK="${DATA_DIR}/.login_lock" write_status () { local state="$1" local msg="$2" local ts ts="$(date -Iseconds)" python - < "$STATUS" import json print(json.dumps({"state":"$state","msg":"$msg","ts":"$ts"}, ensure_ascii=False)) PY } echo "[login] watcher running, data_dir=${DATA_DIR}" while true; do if [ -f "$REQ" ]; then if [ -f "$LOCK" ]; then sleep 1 continue fi touch "$LOCK" write_status "running" "login started. Open noVNC and finish XHS login." set +e python -c "from xhs_crawler_core import login_mode_auto; login_mode_auto('data/storage_state.json', headless=False)" rc=$? set -e if [ $rc -eq 0 ]; then write_status "success" "login finished. storage_state.json updated." else write_status "failed" "login failed (rc=${rc}). Check xhs-novnc logs." fi rm -f "$REQ" rm -f "$LOCK" fi sleep 1 done