VPN 启动比脚本慢——Aurora 代理自动恢复方案

现象

macOS 登录后,系统代理(HTTP/HTTPS)处于关闭状态。手动检查发现 Aurora VPN 进程已经在跑,端口 29290 可达,但系统代理就是没开。

根因

我有一个 LaunchAgent 脚本,在登录时自动检测 Aurora VPN 端口是否可达,可达就开代理,不可达就关代理。

问题出在时序:Aurora VPN 启动需要 10-30 秒,但 LaunchAgent 在登录后几乎立即执行。脚本跑的时候端口还没起来,于是判定”不可达”,把代理关了。之后脚本不再重新执行,代理就一直关着。

旧版逻辑:

端口可达 → 保持当前状态(当时是关的,所以一直关)
端口不可达 → 关闭代理

修复

脚本 v2

改为主动启用逻辑:

端口可达 → 主动启用代理(不管当前状态)
端口不可达 → 关闭代理

关键改动就一行:端口可达时不再”保持现状”,而是显式执行 networksetup -setwebproxystatenetworksetup -setsecurewebproxystate 设为 On。

LaunchAgent 加轮询

旧版只在登录时跑一次。新版加了每 5 分钟重新检测:

<key>StartInterval</key>
<integer>300</integer>

这样即使 Aurora 延迟启动或中途重启,5 分钟内代理就能自动恢复。

验证

修复后立即测试:

HTTP 代理:  127.0.0.1:29290  Enabled: Yes ✓
HTTPS 代理: 127.0.0.1:29290  Enabled: Yes ✓

文件位置

  • 脚本:~/Scripts/aurora-proxy-check.sh
  • LaunchAgent:~/Library/LaunchAgents/com.apple.aurora-proxy-check.plist

教训

时序问题是最难调试的 bug 之一。脚本本身的逻辑没有错,错在执行时机。如果你的 LaunchAgent 依赖某个服务,永远不要假设它在登录时已经就绪。要么加 StartInterval 轮询,要么加 WatchPaths 监听服务就绪信号。