# 2026-09-24 代理节点轮换导致 grok WebUI「迟迟没反应」（含：自愈机制失效 2 天）

- 时间：2026-09-24 23:17 用户报「grok 迟迟没有反应」，23:26 恢复
- 载体：DSH 机（192.168.31.76）· ZACP WebUI（:8680）+ grok CLI · v2ray 代理（10809/10808）
- 结论：**是代理断了**（SS 节点 IP 再次轮换），不是 ZACP/grok 的 bug；
  且**代理自愈机制自 2026-09-22 起一直处于失效状态**，所以没人自动接上。

## 1. 现象与判定

| 检查 | 结果 |
|---|---|
| `curl -x http://127.0.0.1:10809 https://www.google.com` | **超时**（12~15s 无响应） |
| `curl -x socks5h://127.0.0.1:10808 …` | **超时** |
| 本地监听 / 进程 | 正常（v2ray pid 2221492，10808/10809 都在 LISTEN） |
| `~/Downloads/v2ray-setup/v2ray.log` | `failed to process outbound traffic > proxy/shadowsocks: failed to find an available destination > dial tcp 176.122.134.43:6623 / 176.122.191.251:6623` |
| x.ai 直连 | 超时（预期，被墙） |
| WebUI 侧 | 用户 23:17:54 发的消息一直没回复；grok agent 进程在，卡在请求上 |

→ 典型「**节点轮换**」：本地代理配置没错、端口能连，但出口节点已失效。

## 2. 修复动作

1. `chmod 700 ~/Downloads/v2ray-setup/{healthcheck,refresh-sub,restart-v2ray}.sh`
   —— 见下节，这是本次真正的坑。
2. 跑 `~/Downloads/v2ray-setup/refresh-sub.sh`：拉订阅 → 逐个 TCP 探活 → 写入可达节点 → 重启 service。
   - 旧节点（失效）：`176.122.134.43` / `176.122.191.251`
   - **新节点（在用）：`176.122.132.122:6623`、`176.122.191.185:6623`**
   - 验证：google **200**、`api.x.ai` **401**（可达）、下载 **1430 KB/s**
3. 验证自愈链路：等定时器自然触发，`v2ray-healthcheck.service` 在 **23:25:27 → status=0/SUCCESS**。

## 3. 关键发现：自愈定时器「在跑但从没成功过」（2026-09-22 → 09-24）

- `v2ray-healthcheck.timer` 每 5 分钟触发一次，**定时器本身是 enabled 的**，
  但每次 `v2ray-healthcheck.service` 都是：

```
Active: failed (Result: exit-code)
Process: ExecStart=/home/zyw/Downloads/v2ray-setup/healthcheck.sh (code=exited, status=203/EXEC)
```

- 原因：**三个脚本权限都是 `600`（无可执行位）**。systemd 直接 exec 脚本 → `203/EXEC`；
  手工 `bash healthcheck.sh` 虽能跑，但它内部调用 `refresh-sub.sh` 时同样报
  `权限不够`（日志留证：

```
[2026-09-24 23:22:29] 代理不通，触发订阅刷新
/home/zyw/Downloads/v2ray-setup/healthcheck.sh: 行 11: .../refresh-sub.sh: 权限不够
[2026-09-24 23:22:29] ❌ 自愈失败（订阅里也没有可达节点，需人工介入）
```

- 也就是说：**脚本写好了、定时器也挂了，但因为少一个 `chmod +x`，两天里一次都没真正探活/刷新过**。
  本次 `chmod 700` 后链路立即恢复。

## 4. 后续注意

- 只要 proxy 出问题，**先看 `v2ray.log` 是否 `failed to find an available destination`**，
  是就 `refresh-sub.sh`，别去改配置或换客户端。
- 新增脚本/单元后**务必验证一次真实执行**：`systemctl status v2ray-healthcheck.service`
  应显示 `status=0/SUCCESS`，而不是 `203/EXEC`（这类"配好了但跑不起来"最容易漏）。
- grok WebUI 侧的表现连带关系：代理断 → grok 卡住不回复（消息不会丢，恢复后会自动续跑；
  本次 23:24 用户再发一条时，上一轮也一并完成并落库）。
