#!/bin/bash # Watchdog: keep deep crawl alive; restart on death. set -u ROOT="/Users/jack/Project/digital-psychology" LOG="/tmp/cece-capture-deep-full.log" PIDFILE="/tmp/cece-capture-deep.pid" MAX_RESTARTS=30 cd "$ROOT" restart=0 while [ "$restart" -lt "$MAX_RESTARTS" ]; do if [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")" 2>/dev/null; then sleep 20 continue fi restart=$((restart + 1)) echo "[$(date '+%F %T')] watchdog start #$restart" >> "$LOG" adb shell am start -n com.xxwolo.cc5/com.cece.app.MainActivity >/dev/null 2>&1 || true sleep 2 nohup python3 -u tools/cece_capture_deep.py >> "$LOG" 2>&1 & echo $! > "$PIDFILE" echo "[$(date '+%F %T')] pid=$(cat "$PIDFILE")" >> "$LOG" # wait until death while kill -0 "$(cat "$PIDFILE")" 2>/dev/null; do sleep 15 # stall detection: no log growth 3 min if [ -f "$LOG" ]; then sz1=$(wc -c < "$LOG") sleep 90 sz2=$(wc -c < "$LOG") if [ "$sz1" -eq "$sz2" ] && kill -0 "$(cat "$PIDFILE")" 2>/dev/null; then echo "[$(date '+%F %T')] stall → kill $(cat "$PIDFILE")" >> "$LOG" kill "$(cat "$PIDFILE")" 2>/dev/null || true sleep 2 kill -9 "$(cat "$PIDFILE")" 2>/dev/null || true break fi fi done echo "[$(date '+%F %T')] crawl exited, restart soon" >> "$LOG" sleep 5 done echo "[$(date '+%F %T')] watchdog gave up after $MAX_RESTARTS" >> "$LOG"