#!/bin/bash # 看 watchdog 到底按什么节奏在重启,以及是不是过度重启 set -u echo "════════ 1. watchdog 最近 30 行 ════════" tail -30 /root/lanremote-relay/watchdog.log 2>/dev/null | sed 's/^/ /' echo echo "════════ 2. 本次开机以来所有"重启隧道"记录 ════════" grep -E '重启 \[' /root/lanremote-relay/watchdog.log 2>/dev/null | tail -25 | sed 's/^/ /' echo echo "════════ 3. 重启的间隔(判断是不是过频)════════" grep -E '重启 \[' /root/lanremote-relay/watchdog.log 2>/dev/null \ | grep -oE '^\[[0-9-]+ [0-9:]+' | sed 's/\[//' \ | awk '{ cmd = "date -d \"" $0 "\" +%s" cmd | getline ts; close(cmd) if (prev) printf " %s (+%d 秒)\n", $0, ts - prev else printf " %s\n", $0 prev = ts }' | tail -25 echo echo "════════ 4. 每次重启的原因分类 ════════" grep -E '重启 \[' /root/lanremote-relay/watchdog.log 2>/dev/null \ | sed -E 's/^\[[0-9-]+ [0-9:]+\] //' \ | sed -E 's/(距上次 [0-9]+ 秒)//' \ | sed -E 's/\|/ | /g' \ | awk -F'——' '{print $1}' | sed 's/[0-9]\+ 次/N 次/' \ | sort | uniq -c | sort -rn | head -12 | sed 's/^/ /' echo echo "════════ 5. 服务重启计数(systemd 层面)════════" for svc in lanremote-tunnel lanremote-tunnel-h2; do n=$(journalctl -u "$svc" --since '3 hours ago' --no-pager 2>/dev/null | grep -c 'Starting') echo " $svc 最近 3 小时启动 $n 次" done echo echo "════════ 6. 最近 1 小时的完整 watchdog 活动 ════════" awk '/\[10-07 (1[78]):/' /root/lanremote-relay/watchdog.log 2>/dev/null | tail -25 | sed 's/^/ /' echo echo "════════ 7. 当前状态 ════════" echo " watchdog: $(systemctl is-active lanremote-watchdog.timer)" echo " 状态文件: $(cat /root/lanremote-relay/watchdog.state 2>/dev/null | tr '\n' ' ')" echo " 上次重启: $(date -d @$(cat /root/lanremote-relay/watchdog.last_restart 2>/dev/null || echo 0) '+%Y-%m-%d %H:%M:%S' 2>/dev/null)" echo " 现在: $(date '+%Y-%m-%d %H:%M:%S')" echo " 连接数: quic=$(curl -s --max-time 4 http://127.0.0.1:20241/metrics 2>/dev/null | grep ha_connections | awk '{print $2}') http2=$(curl -s --max-time 4 http://127.0.0.1:20242/metrics 2>/dev/null | grep ha_connections | awk '{print $2}')" echo " 长测进度: 健康 $(wc -l < /root/long2h_health.tsv) 条, 轮询 $(wc -l < /root/rp_poll30.tsv) / 30"