wechat_reply_daemon.sh 1.6 KB
#!/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