#!/bin/bash # 确认 watchdog 能自动从服务配置里读出正确的端口 set -u echo "════════ 1. 两个服务配置里的 --metrics ════════" for svc in lanremote-tunnel lanremote-tunnel-h2; do p=$(systemctl cat "$svc" 2>/dev/null \ | grep -oE '\-\-metrics[[:space:]]+[0-9.]+:[0-9]+' | head -1 \ | grep -oE '[0-9]+$') echo " $svc -> ${p:-(读不到)}" done echo echo "════════ 2. 实际绑定的端口 ════════" for p in $(pgrep cloudflared); do cg=$(cat /proc/$p/cgroup 2>/dev/null | head -1) svc=$(basename "$cg" 2>/dev/null | sed 's/\.service$//') port=$(ss -tlnp 2>/dev/null | grep "pid=$p" | grep -oE '2024[0-9]' | head -1) echo " $svc -> ${port:-(没绑)}" done echo echo "════════ 3. watchdog 预演(看它读到几个实例、什么端口)════════" echo " 当前实际连接数:" for port in 20241 20242; do n=$(curl -s --max-time 4 http://127.0.0.1:$port/metrics 2>/dev/null \ | grep '^cloudflared_tunnel_ha_connections' | awk '{print $2}') echo " 端口 $port: ${n:-无响应}" done echo echo " 预演输出(DRY_RUN=1):" DRY_RUN=1 bash /root/lanremote-relay/watchdog.sh 2>&1 | sed 's/^/ /' echo " (没有输出 = 一切正常,没触发任何重启 —— 这是对的)" echo echo "════════ 4. 构造一个"副实例掉线"的场景,看它认不认得出 ════════" echo " 说明:不停真服务,直接把 watchdog 的端口指向一个没人听的端口来验证" sed 's/:20242/:20299/' /root/lanremote-relay/watchdog.sh > /tmp/wd_fake.sh DRY_RUN=1 bash /tmp/wd_fake.sh 2>&1 | sed 's/^/ /' echo " (期望:认出 lanremote-tunnel-h2 无响应,并只重启它)"