Files
ykxmz/_build/tune_watchdog.py
T
xmz7891 b62ac865ea ykxmz 1.5.0:修复手表端 TLS 证书校验 + MTU 修复网络稳定性
被控端
- 修复 MTU 问题:夹 MSS + 路径 MTU 探测(公网可用率 48% -> 100%)
- 复用 HTTP 连接(免掉每次新建 TLS 的 30% 握手失败)
- 每分钟回头找局域网,自动切回快 400 倍的路径
- 画面心跳帧:静止时省流量,客户端仍知道流是活的
- 锁屏时给出可操作的提示

手表端
- 内置 GTS Root R4 / GlobalSign Root CA,修 SSLHandshakeException
- 连接错误翻译成人话(证书/时间/解析/超时分别提示)
- 经中转连上后用服务器报的地址刷新已配对记录
- 新增局域网连接页面、服务器延迟检测

服务器端
- 支持 chunked 请求体(修每 16 秒一次的连接错乱与大面积 502)
- 网络调优脚本 net-tune.sh(开机自动应用)
- 管理页:批量删除、网络体检、下载区
- 隧道改 HTTP/2 + 双连接

文档
- 许可协议 / 安装前必读 / 安装后须知(作者:小麦子)
2026-10-06 19:01:05 +08:00

99 lines
3.3 KiB
Python

# -*- coding: utf-8 -*-
"""给看门狗加"最小重启间隔",防止链路成片抖动时反复重启。
观察到的现象:
链路差的时候,看门狗每隔 ~40 秒就重启一次隧道。
而每次重启之后 cloudflared 要重新建连接、约 30~90 秒才稳。
频繁重启反而让它永远处在"正在重连"的状态,得不偿失。
调整:
THRESHOLD 2 -> 3 连续 3 次(约 60 秒)才认定真出问题。
短抖动(<1 分钟)交给 cloudflared 自己重连。
MIN_RESTART_GAP = 120 两次重启之间至少隔 2 分钟,
免得抖起来没完没了地重启。
"""
from __future__ import annotations
import sys
from pathlib import Path
WATCHDOG = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote\relay"
r"\watchdog.sh")
OLD = '''THRESHOLD=2 # 连续几次就重启
STALE_MINUTES=10 # 日志多久没动静算卡死'''
NEW = '''# 连续几次公网不通才重启。
# 设 3(约 60 秒)而不是 2:短抖动让 cloudflared 自己重连就好,
# 频繁重启反而让它一直停在"正在重连"的状态。
THRESHOLD=3
STALE_MINUTES=10 # 日志多久没动静算卡死
# 两次重启之间至少隔这么久(秒)。
# 链路成片抖动时,这个能防止"重启 -> 刚好 -> 又抖 -> 再重启"的死循环。
MIN_RESTART_GAP=120'''
RESTART_OLD = '''restart_tunnel() {
local why="$1"
log "$why —— 重启隧道"
systemctl restart lanremote-tunnel
write_state 0 0
sleep 25
log "重启后地址: $(cat "$URL_FILE" 2>/dev/null || echo '(还没拿到)')"
exit 0
}'''
RESTART_NEW = '''LAST_RESTART_FILE="$RELAY_DIR/watchdog.last_restart"
restart_tunnel() {
local why="$1"
local now last gap
now=$(date +%s)
last=0
[ -f "$LAST_RESTART_FILE" ] && last=$(cat "$LAST_RESTART_FILE" 2>/dev/null || echo 0)
gap=$((now - last))
if [ "$gap" -lt "$MIN_RESTART_GAP" ]; then
# 刚重启过还没到间隔:这次先不重启,
# 让 cloudflared 自己把连接建起来(它本来就在重试)。
log "$why —— 但距上次重启才 ${gap} 秒(下限 ${MIN_RESTART_GAP} 秒),先不重启"
write_state 0 0
exit 0
fi
log "$why —— 重启隧道(距上次 ${gap} 秒)"
echo "$now" > "$LAST_RESTART_FILE"
systemctl restart lanremote-tunnel
write_state 0 0
sleep 25
log "重启后地址: $(cat "$URL_FILE" 2>/dev/null || echo '(还没拿到)')"
exit 0
}'''
def main() -> int:
text = WATCHDOG.read_text(encoding="utf-8")
ok = True
if "MIN_RESTART_GAP" in text:
print(" 已经加过重启间隔")
else:
for old, new, tag in ((OLD, NEW, "阈值和间隔常量"),
(RESTART_OLD, RESTART_NEW, "重启函数加间隔判断")):
if old in text:
text = text.replace(old, new, 1)
print(f" {tag}")
else:
print(f" [失败] {tag} —— 锚点没找到")
ok = False
WATCHDOG.write_text(text, encoding="utf-8", newline="\n")
raw = WATCHDOG.read_bytes()
if b"\r\n" in raw:
WATCHDOG.write_bytes(raw.replace(b"\r\n", b"\n"))
print(" 顺手修了 CRLF")
return 0 if ok else 1
if __name__ == "__main__":
sys.exit(main())