#!/bin/bash # 加快掉电重启后的恢复速度。 # # 背景(实测数据): # 用户撞上的 Cloudflare Error 1033 是设备**掉电重启**造成的。 # 修之前开机要 2 分 10 秒公网才恢复,那段时间浏览器就是 1033。 # # 根因:这台机器 NetworkManager 和 systemd-networkd 同时在跑, # 但 wlan0 归 NetworkManager 管。 # NetworkManager-wait-online -> 9 秒成功 # systemd-networkd-wait-online -> 等不归它管的网络, # 干等 2 分钟超时然后 failed # network-online.target 要等两个都完成, # 被那个失败的拖了整整 2 分钟, # relay / tunnel / net-tune 全跟着等。 # # 修完:用户空间 2分6秒 -> 14秒;掉电重启后 24 秒公网恢复。 set -u echo " 1. mask 掉 systemd-networkd-wait-online(网络不归它管)" systemctl disable --now systemd-networkd-wait-online.service 2>&1 | sed 's/^/ /' systemctl mask systemd-networkd-wait-online.service 2>&1 | sed 's/^/ /' echo " 2. watchdog 首次检查提前到开机后 45 秒" cat > /etc/systemd/system/lanremote-watchdog.timer <<'EOF' [Unit] Description=每 20 秒检查一次隧道连接数 [Timer] # 原来 OnBootSec=2min。开机后隧道几十秒就连上了, # 干等 2 分钟才第一次检查没必要。 OnBootSec=45s OnUnitActiveSec=20s AccuracySec=5s Unit=lanremote-watchdog.service [Install] WantedBy=timers.target EOF systemctl daemon-reload systemctl restart lanremote-watchdog.timer echo " 3. 确认" echo " networkd-wait-online: $(systemctl is-enabled systemd-networkd-wait-online 2>&1)(应为 masked)" echo " watchdog timer: $(systemctl is-active lanremote-watchdog.timer 2>&1)" systemctl list-dependencies network-online.target --no-pager 2>/dev/null | sed 's/^/ /'