montana/Русский/Логистика/run_sweep_loop.sh

70 lines
2.3 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
# Simple loop: run mt_detail_sweep.py --limit 50 with 6min timeout per run
# Kill Chrome after each run. Restart until nothing to do.
MAIN_LOG="/tmp/mt_detail_live.txt"
SCRIPT="c:/project/Cursor/Логистика/mt_detail_sweep.py"
PYTHON="python"
LIMIT=50
DELAY=0.8
TIMEOUT_SEC=420 # 7 minutes per run (login ~60s + 50 vessels ~200s = ~260s, generous)
MAX_RUNS=400
cd "c:/project/Cursor/Логистика"
echo "[LOOP $(date +%H:%M:%S)] Starting sweep loop (LIMIT=$LIMIT DELAY=${DELAY}s TIMEOUT=${TIMEOUT_SEC}s)" > "$MAIN_LOG"
for ((run=1; run<=MAX_RUNS; run++)); do
RUN_LOG="/tmp/mt_run_${run}.txt"
echo "" >> "$MAIN_LOG"
echo "[LOOP $(date +%H:%M:%S)] === Run $run ===" | tee -a "$MAIN_LOG"
# Run Python in background, output to per-run log
$PYTHON -u "$SCRIPT" --limit $LIMIT --delay $DELAY > "$RUN_LOG" 2>&1 &
CHILD_PID=$!
echo "[LOOP] PID=$CHILD_PID" >> "$MAIN_LOG"
# Wait up to TIMEOUT_SEC for child to finish, checking every 5s
WAITED=0
while [ $WAITED -lt $TIMEOUT_SEC ]; do
sleep 5
WAITED=$((WAITED + 5))
if ! kill -0 $CHILD_PID 2>/dev/null; then
break # Process ended naturally
fi
done
# Kill if still running after timeout
if kill -0 $CHILD_PID 2>/dev/null; then
echo "[LOOP $(date +%H:%M:%S)] Killing PID $CHILD_PID (timeout ${TIMEOUT_SEC}s)" | tee -a "$MAIN_LOG"
kill -TERM $CHILD_PID 2>/dev/null || true
sleep 5
kill -KILL $CHILD_PID 2>/dev/null || true
sleep 2
fi
wait $CHILD_PID 2>/dev/null || true
EXIT_CODE=$?
echo "[LOOP $(date +%H:%M:%S)] Run $run done (waited=${WAITED}s)" | tee -a "$MAIN_LOG"
# Append run log to main log
if [ -f "$RUN_LOG" ]; then
tail -20 "$RUN_LOG" >> "$MAIN_LOG"
fi
# Kill any leftover Chrome
wmic process where "name='chrome.exe'" delete >NUL 2>&1
sleep 2
# Check if done — only look at THIS run's output
if [ -f "$RUN_LOG" ] && grep -q "Nothing to do!\|Vessels to process: 0" "$RUN_LOG" 2>/dev/null; then
echo "[LOOP] COMPLETE — nothing left to process!" | tee -a "$MAIN_LOG"
break
fi
# Brief pause between runs
sleep 5
done
echo "[LOOP $(date +%H:%M:%S)] Supervisor done after $run runs." | tee -a "$MAIN_LOG"