- commit
- 8a33fa2
- parent
- c42fb56
- author
- im_wower
- date
- 2026-03-30 05:45:09 +0800 CST
fix: watchdog v4 - renewed retry + enhanced logging
1 files changed,
+9,
-15
+9,
-15
1@@ -1,17 +1,12 @@
2 #!/bin/bash
3-# 看门狗 v3:定时唤醒 + 兜底超时 + 进度文件
4-# 状态:working/waiting/renewed/paused/done
5-# 唤醒条件(waiting 状态下,任一满足即续命):
6-# 1. wake_at > 0 且 now >= wake_at(定时唤醒)
7-# 2. now >= max_wake_at(兜底,无论什么状态,除了 done/paused)
8-# 3. wake_at == 0 且 idle > timeout(空闲超时,兼容旧模式)
9+# 看门狗 v4:renewed 超时重试
10
11 SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
12 CHECK_INTERVAL=${1:-60}
13 HEARTBEAT=/tmp/claude_heartbeat.json
14 LOG="${SCRIPT_DIR}/watchdog.log"
15
16-echo "[$(date)] watchdog v3 started, interval=${CHECK_INTERVAL}s" >> "$LOG"
17+echo "[$(date)] watchdog v4 started, interval=${CHECK_INTERVAL}s" >> "$LOG"
18
19 while true; do
20 sleep $CHECK_INTERVAL
21@@ -45,6 +40,9 @@ try:
22 elif wake_at == 0 and idle > timeout:
23 need = "yes"
24 reason = f"idle timeout ({idle}s>{timeout}s)"
25+ elif status == "renewed" and idle > timeout:
26+ need = "yes"
27+ reason = f"renewed but no response, retry ({idle}s>{timeout}s)"
28
29 print(f"{status}|{idle}|{timeout}|{tab}|{need}|{msg}|{reason}|{wake_at}|{max_wake}")
30 except:
31@@ -64,23 +62,19 @@ PYEOF
32 continue
33 fi
34
35+ echo "[$(date)] CHECK: status=$ST idle=${IDLE}s timeout=${TOUT}s need=$NEED wake=$WAKE max=$MAXW reason=$REASON" >> "$LOG"
36+
37 if [ "$NEED" = "yes" ]; then
38 echo "[$(date)] RENEWAL: $REASON" >> "$LOG"
39 bash "${SCRIPT_DIR}/a11y_msg.sh" "$TAB" "$MSG"
40+ A11Y_RC=$?
41 python3 << PYEOF2
42 import json, time
43 d = json.load(open("$HEARTBEAT"))
44 d["ts"] = int(time.time())
45 d["status"] = "renewed"
46-d["wake_at"] = 0
47-d["max_wake_at"] = 0
48 json.dump(d, open("$HEARTBEAT", "w"))
49 PYEOF2
50- echo "[$(date)] RENEWED" >> "$LOG"
51- else
52- extra = ""
53- [ "$WAKE" != "0" ] && extra=" wake_at=$WAKE"
54- [ "$MAXW" != "0" ] && extra="$extra max=$MAXW"
55- echo "[$(date)] OK: status=$ST idle=${IDLE}s/${TOUT}s$extra" >> "$LOG"
56+ echo "[$(date)] RENEWED (a11y_rc=$A11Y_RC)" >> "$LOG"
57 fi
58 done