现象
macOS 登录后,系统代理(HTTP/HTTPS)处于关闭状态。手动检查发现 Aurora VPN 进程已经在跑,端口 29290 可达,但系统代理就是没开。
根因
我有一个 LaunchAgent 脚本,在登录时自动检测 Aurora VPN 端口是否可达,可达就开代理,不可达就关代理。
问题出在时序:Aurora VPN 启动需要 10-30 秒,但 LaunchAgent 在登录后几乎立即执行。脚本跑的时候端口还没起来,于是判定”不可达”,把代理关了。之后脚本不再重新执行,代理就一直关着。
旧版逻辑:
端口可达 → 保持当前状态(当时是关的,所以一直关)
端口不可达 → 关闭代理
修复
脚本 v2
改为主动启用逻辑:
端口可达 → 主动启用代理(不管当前状态)
端口不可达 → 关闭代理
关键改动就一行:端口可达时不再”保持现状”,而是显式执行 networksetup -setwebproxystate 和 networksetup -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 监听服务就绪信号。