#!/system/bin/sh # 环节1 watcher 的常驻监督器(root 运行,带 Termux 环境)。 # 职责:单实例、等微信登录就绪、看门狗式崩溃重启。 # 由 /data/adb/service.d/wechat-reply-watcher.sh 开机拉起;也可手动直接跑。 export HOME=/data/data/com.termux/files/home export PREFIX=/data/data/com.termux/files/usr export PATH=$PREFIX/bin:/system/bin:/system/xbin export LD_LIBRARY_PATH=$PREFIX/lib export TMPDIR=$PREFIX/tmp PY=$PREFIX/bin/python W=$HOME/.hermes/wechat_reply WATCHER=$W/wechat_reply_watcher.py LOG=$W/daemon.log LOCK=$W/daemon.lock mkdir -p "$W" # ── 单实例:已有活着的监督器就退出 ── if [ -f "$LOCK" ]; then OLD=$(cat "$LOCK" 2>/dev/null) if [ -n "$OLD" ] && kill -0 "$OLD" 2>/dev/null; then echo "$(date) 监督器已在跑 pid=$OLD,退出" >> "$LOG" exit 0 fi fi echo $$ > "$LOCK" echo "$(date) 监督器启动 pid=$$" >> "$LOG" # ── 等 Termux python ── i=0 while [ ! -x "$PY" ]; do sleep 5; i=$((i + 1)) [ $i -gt 60 ] && { echo "$(date) 等不到 python,放弃" >> "$LOG"; rm -f "$LOCK"; exit 1; } done # ── 等微信登录 / DB 可解密(selftest 通过)── until "$PY" "$WATCHER" --selftest >/dev/null 2>&1; do echo "$(date) 等微信登录/DB 就绪…" >> "$LOG" sleep 15 done echo "$(date) 就绪,进入看门狗循环" >> "$LOG" # ── 看门狗:watcher 退出就重启(退避 10s)── while true; do echo "$(date) 拉起 watcher" >> "$LOG" "$PY" "$WATCHER" >> "$LOG" 2>&1 echo "$(date) watcher 退出 rc=$?,10s 后重启" >> "$LOG" sleep 10 done