对齐测测交互:首页「+」支持邀请填档案/添加档案/邀请合盘;各 Tab 与工具页按同一视觉与功能标准落地;本地对照截图目录显式忽略。 Co-authored-by: Cursor <cursoragent@cursor.com>
44 lines
1.4 KiB
Bash
Executable File
44 lines
1.4 KiB
Bash
Executable File
#!/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"
|