Files
ykxmz/_build/verify_watchdog.sh
xmz7891 bcb089eded 看门狗:连接数掉到 1 就立刻重启,不等攒够 3 次
排查公网间歇 530 时发现的:
  watchdog 日志显示「公网不通(HTTP 530,ha_connections=1)」
  —— 出问题那段时间隧道**只剩 1 条连接**。

原来 watchdog 只把 CONNS == 0 算"零连接",
CONNS == 1 不当回事。但实测**只剩一条连接时跨机房回源就会失败**
(请求落 SEA,隧道只剩 LAX 一条)。

改法:
  * CONNS <= 1 都计入降级计数
  * 公网不通 **且** 连接数已在危险区 = 确认的故障(不是短抖动)
    -> 立刻重启,不等 3 次

每次检查间隔 20 秒,等 3 次就是白断 40 秒。现在能省下来。

实测:改完公网 15/15 = 100%,连接数 4 条。

顺带说明 watchdog 是怎么跑的:
  systemd timer(lanremote-watchdog.timer),每 20 秒调一次
  watchdog.service。之前查"服务是 inactive"一度以为它没在跑,
  其实是 timer 触发型的 —— oneshot 服务跑完就是 inactive,正常。
2026-10-07 10:00:50 +08:00

39 lines
1.1 KiB
Bash

#!/bin/bash
# 验证改进后的 watchdog
set -u
echo " 一、语法检查"
if bash -n /root/lanremote-relay/watchdog.sh 2>&1; then
echo " ✓ watchdog.sh 语法 OK"
else
echo " ✗ 语法有问题"
fi
echo
echo " 二、手动跑一次(看它怎么判断)"
bash /root/lanremote-relay/watchdog.sh 2>&1 | tail -4 | sed 's/^/ /'
echo
echo " 三、公网连打 15 次"
ok=0
for i in $(seq 1 15); do
c=$(curl -s -o /dev/null -w '%{http_code}' --max-time 15 \
-H 'User-Agent: LanRemote/1.4.0' https://relay.xxmxxs.top/v1/health)
[ "$c" = "200" ] && ok=$((ok + 1))
printf " %2d: %s\n" "$i" "$c"
sleep 1
done
echo " 可用 $ok/15"
echo
echo " 四、当前连接数"
echo " $(curl -s --max-time 5 http://127.0.0.1:20241/metrics 2>/dev/null | grep '^cloudflared_tunnel_ha_connections' | awk '{print $2}') 条"
echo
echo " 五、watchdog 定时器"
systemctl list-timers lanremote-watchdog.timer --no-pager 2>/dev/null | head -3 | sed 's/^/ /'
echo
echo " 六、watchdog 日志最后 6 行"
tail -6 /root/lanremote-relay/watchdog.log 2>/dev/null | sed 's/^/ /'