Files
openclaw-skill/chapters/04-known-issues.md
Selig 4c966a3ad2 Initial commit: OpenClaw Skill Collection
6 custom skills (assign-task, dispatch-webhook, daily-briefing,
task-capture, qmd-brain, tts-voice) with technical documentation.
Compatible with Claude Code, OpenClaw, Codex CLI, and OpenCode.
2026-03-13 10:58:30 +08:00

313 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 4. 已知問題與修復
### 4.1 Node.js 22/24 fetch 無法連線 Telegram API
**症狀**`Telegram: failed - fetch failed`,但 curl 可以正常連線
**根因**Node.js 22+ 的 `fetch`(基於 undici`autoSelectFamily`happy eyeballs優先嘗試 IPv6。伺服器沒有可用的 IPv6 對外連線。
**修復(三層)**
1. 系統層停用 IPv6
```bash
# 永久設定(/etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1
```
2. gateway.env 加入 NODE_OPTIONS
```
NODE_OPTIONS=--dns-result-order=ipv4first --no-network-family-autoselection
```
3. openclaw.json config 層覆蓋(**Node 24 必須,因 OpenClaw 內部 hardcode `autoSelectFamily:true`**
```json
{ "channels": { "telegram": { "network": { "autoSelectFamily": false, "dnsResultOrder": "ipv4first" } } } }
```
**注意**sysctl + NODE_OPTIONS 在 Node 22 就夠了,但 Node 24 的 undici 不吃這些設定,必須用 openclaw.json config 覆蓋(見 §4.13)。
### 4.2 OpenClaw 腳本顯示「未運行」
**症狀**`sudo bash kejilion.sh app OpenClaw` 顯示「已安裝 未運行」,但 Gateway 實際在跑
**根因**:腳本用 `pgrep -f "openclaw gateway"` 判斷,但 pm2/systemd 啟動的進程名稱不符
**修復**:改用 tmux 啟動(若要讓腳本正確識別),或改用 systemd推薦
### 4.3 Docker nginx 開機後無法啟動
**症狀**`nginx: bind() to 0.0.0.0:80 failed (98: Address in use)`
**根因**:系統安裝的 nginx`/usr/sbin/nginx`)設為 enabled開機時搶先佔用 port 80
**修復**
```bash
sudo systemctl stop nginx
sudo systemctl disable nginx
```
### 4.4 Multi-Agent Config Schema 與文件不符v2026.2.17
**症狀**:修改 `openclaw.json` 後 Gateway 啟動失敗,報 `Unrecognized key: "agentId"``bindings.0.match: Invalid input`
**根因**:官方文件範例使用舊版 schema與實際 v2026.2.17 不相容
**正確格式**
- `agents.list[].id`(不是 `agentId`
- `bindings[]` 需要 `{ "agentId": "xxx", "match": { "channel": "telegram", "accountId": "yyy" } }`
- 詳見 [06-config.md 6.2 節](06-config.md)
### 4.5 新 Bot /start 無配對碼回應
**症狀**:在新 Telegram Bot 按 /start 沒有任何回應
**根因**:按 /start 時 Gateway 尚未載入新 Bot TokenTelegram update 被消耗但無人處理
**修復**:確保 config 已正確 + Gateway 重啟成功後再按 /start
### 4.6 使用 accounts 後主 Bot 通道不啟動2026-02-25
**症狀**`openclaw channels list` 只顯示 `life-bot`,主 Bot@Cimon168_bot)不啟動,啟動日誌無 `[default] starting provider` 訊息
**根因**:當 `channels.telegram.accounts` 區塊存在時OpenClaw 只啟動 `accounts` 裡明確列出的帳號。頂層 `botToken` 不再被視為獨立通道。
**修復**:將主 Bot token 從頂層移入 `accounts.default`
```json
"accounts": {
"default": {
"botToken": "<主 Bot Token>"
},
"life-bot": {
"botToken": "<生活 Bot Token>"
}
}
```
修改後重啟:`systemctl --user restart openclaw-gateway`
### 4.7 Multi-Agent 後 workspace skills 消失2026-02-25
**症狀**Gateway 重啟後 `openclaw skills list` 只顯示 bundled skillsworkspace skillsdaily-briefing、qmd-brain、task-capture消失。Agent 回覆不認識這些 skills。
**根因**`agents.list` 只有具名 agent`life-assistant`)時,隱含的預設 agentmain不會觸發 workspace skills 掃描。OpenClaw 只對 `agents.list` 中明確列出的 agent 執行 workspace 目錄的 skills 發現。
**修復**:在 `agents.list` 明確加入 `main` agent並在 `bindings` 加入 `default → main` 綁定:
```json
"agents": {
"list": [
{
"id": "main",
"name": "主 Agent",
"model": { "primary": "cliapi/gpt-5.3-codex" },
"workspace": "/home/selig/.openclaw/workspace"
},
{ "id": "life-assistant", "..." }
]
},
"bindings": [
{ "agentId": "main", "match": { "channel": "telegram", "accountId": "default" } },
{ "agentId": "life-assistant", "match": { "channel": "telegram", "accountId": "life-bot" } }
]
```
修改後重啟:`systemctl --user restart openclaw-gateway`
**驗證**:檢查啟動 log 是否有 workspace skills 的 sanitization 記錄:
```bash
journalctl --user -u openclaw-gateway --since "1 min ago" --no-pager | grep daily-briefing
```
### 4.8 OpenClaw WebUI 配對問題
**症狀**`https://oclaw.nature.edu.kg/#token=...` 顯示 "backend not paired yet"
**修復**:在後端核准配對請求
```bash
sudo openclaw devices list # 查看 pending request ID
sudo openclaw devices approve <request-id>
```
### 4.9 升級 2026.2.25 後 Gateway 啟動失敗2026-02-27
**症狀**`Error: Unsafe fallback OpenClaw temp dir: /tmp/openclaw-1000`
**根因**:新版加強 temp 目錄安全檢查,要求 `/tmp/openclaw-<UID>` 權限必須 `700`owner-only舊版建立的目錄權限為 `775`
**修復**
```bash
chmod 700 /tmp/openclaw-1000 # selig (UID 1000)
# root 的 temp dir 也需清理
sudo rm -rf /tmp/openclaw-0 && sudo mkdir -p /tmp/openclaw-0 && sudo chmod 700 /tmp/openclaw-0
```
### 4.10 升級後 `google-antigravity-auth` plugin 警告2026-02-27
**症狀**`plugin removed: google-antigravity-auth (stale config entry ignored)`
**根因**`google-antigravity-auth` plugin 已從 2026.2.25 移除,但 `openclaw.json` 仍有殘留設定。
**修復**:從 `openclaw.json``plugins.entries` 刪除 `google-antigravity-auth` 條目。此 plugin 用於 OpenClaw 直連 Google API 認證,與 CLIProxyAPI 代理的 Gemini 模型無關。
### 4.11 `sudo openclaw skills list` 偵測不到 selig 環境的 CLI2026-02-27
**症狀**`coding-agent``summarize` 顯示 `✗ missing`,但實際 CLI 已安裝。
**根因**`sudo openclaw` 以 root 執行PATH 不含 selig 的 `~/.local/bin` 和 nvm 路徑。
**修復**:使用 `openclaw skills list`(不加 sudo即可正確偵測。Gateway 以 selig user service 運行,不受影響。
### 4.12 Browser control 連線逾時2026-03-02
**症狀**Telegram Agent 嘗試操控瀏覽器時報 `Browser control service 連線逾時15 秒)`
**根因**(多層問題):
1. **Node service 未安裝**OpenClaw 的瀏覽器控制需要 Node Host service 作為 Gateway 和本機瀏覽器之間的 relay
2. **Node service 未配對**:首次連線 Gateway 時需經過 device pairing 核准
3. **缺少 DISPLAY 環境變數**Gateway 和 Node service 的 systemd unit 都沒有 `DISPLAY=:99`,導致無法操控 Xvfb 上的瀏覽器
4. **Snap Chromium 限制**Ubuntu snap 版 Chromium 的包裝器會剝掉 `--load-extension``--remote-debugging-port` 旗標,無法載入 OpenClaw 擴充套件或啟用 CDP
**修復**
```bash
# 1. 安裝 Node service 並加入 DISPLAY
openclaw node install
# 編輯 ~/.config/systemd/user/openclaw-node.service 加入 Environment=DISPLAY=:99
# 2. 在 gateway.env 加入 DISPLAYGateway service 也要加
echo 'DISPLAY=:99' >> ~/.config/openclaw/gateway.env
# 編輯 ~/.config/systemd/user/openclaw-gateway.service 加入 Environment=DISPLAY=:99
# 3. 啟動 Node service 並配對
systemctl --user daemon-reload
systemctl --user enable --now openclaw-node.service
openclaw devices list # 等待 pending request
openclaw devices approve <id> # 核准
# 4. 改用 Playwright Chromium非 snap支援 CDP 直連)
# 建立 playwright-chrome.service 並啟用
systemctl --user enable --now playwright-chrome.service
# 5. 建立 cdp-direct profile 設為預設
openclaw browser create-profile --name cdp-direct --cdp-url http://127.0.0.1:18801
# openclaw.json → browser.defaultProfile: "cdp-direct"
# 6. 重啟 Gateway
systemctl --user restart openclaw-gateway
```
### 4.16 Agent browser tool timeout — `openclaw` profile 啟動失敗2026-03-11
**症狀**CLI 的 `openclaw browser navigate` 正常,但 Agent 透過 tool call 使用瀏覽器時 15 秒 timeout
```
[tools] browser failed: timed out. Restart the OpenClaw gateway...
```
**根因**v2026.3.7 內建了 `openclaw` browser profileport 18800Gateway 啟動時會嘗試用 `detectedPath``/usr/bin/chromium-browser`snap 版)啟動這個 profile。snap Chromium 會剝掉 `--remote-debugging-port` 參數,導致 CDP 永遠無法建立。`openclaw browser profiles` 顯示此 profile 為 `stopped` 狀態。
**關鍵差異**CLI 指令走 `defaultProfile`cdp-direct但 agent tool call 可能嘗試使用 `openclaw` profile。
**修復**
1.`openclaw.json``browser.profiles` 覆寫 `openclaw` profile讓它指向 Playwright CDP
```json
{
"browser": {
"profiles": {
"openclaw": {
"cdpUrl": "http://127.0.0.1:18801",
"color": "#FF4500"
}
}
}
}
```
2. 確認 Gateway service 有 `Environment=DISPLAY=:99``~/.config/systemd/user/openclaw-gateway.service`
**驗證**
```bash
openclaw browser profiles
# 三個 profilecdp-direct、chrome、openclaw都應顯示 runningport 18801
```
### 4.13 Node.js 24 undici autoSelectFamily 導致 Telegram 連線逾時2026-03-02
**症狀**Gateway 重啟後 Telegram 持續 `Network request failed`,但 `curl` 可正常連線 Telegram API
**根因**Node.js 24 的 `fetch()`undici`autoSelectFamily`happy eyeballs會同時嘗試 IPv4/IPv6。即使系統 sysctl 停用 IPv6 + `NODE_OPTIONS=--dns-result-order=ipv4first`OpenClaw 內部(`ssrf-D_av5wos.js`hardcode `autoSelectFamily: true`,覆蓋了 NODE_OPTIONS。
**修復**:在 `openclaw.json` 用 config 層級覆蓋:
```json
{
"channels": {
"telegram": {
"network": {
"autoSelectFamily": false,
"dnsResultOrder": "ipv4first"
}
}
}
}
```
同時在 `gateway.env` 的 NODE_OPTIONS 加入 `--no-network-family-autoselection`(雙保險)。
**驗證**Gateway log 應顯示 `autoSelectFamily=false (config)`
### 4.14 GPU driver suspend/resume 死鎖導致 Bot 全卡2026-03-02
**症狀**:所有 Telegram Bot 收到訊息後無回應,`nvidia-smi` 掛起不返回
**根因(三層連鎖故障)**
1. **系統觸發 suspend/resume**`nvidia-sleep.sh` 在 kernel 的 `uvm_suspend()` 死鎖(狀態 `Ds` 不可中斷)
2. **GPU driver 無法存取** → llama-embed 的 port 11435 雖然 listen但 embedding 請求永遠無回應
3. **memory-lancedb-pro 的 `before_agent_start` hook 阻塞** → 每個 agent 啟動時呼叫 embedding API 做 autoRecall因 llama-embed 無回應而無限等待,導致所有 agent 卡死
**診斷流程**
```bash
# 1. 確認 GPU 死鎖
timeout 5 nvidia-smi || echo "GPU driver 死鎖"
# 2. 確認 llama-embed 無回應
timeout 5 curl -s http://127.0.0.1:11435/v1/embeddings \
-H "Content-Type: application/json" \
-d '{"input":"test","model":"nomic-embed-text-v1.5"}' || echo "embedding 無回應"
# 3. 確認殘留 process
ps aux | grep nvidia-sleep # 看到 Ds 狀態 = 死鎖
ps aux | grep llama-server # 可能有殘留舊 process 占住 port
```
**緊急修復(免重開機讓 Bot 恢復)**
```bash
# 關閉 autoRecall讓 agent 不依賴 embedding 即可啟動
openclaw config set plugins.entries.memory-lancedb-pro.config.autoRecall false
# Gateway 會自動偵測 config 變更並重啟
```
**根治**:重開機修復 GPU driver
**預防**:停用系統休眠
```bash
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
```
### 4.15 Embedding 容錯策略2026-03-02
llama-embedGPU是唯一的 production embedding 路徑。Ollama CPU 模式雖有 `nomic-embed-text`port 11434~1.4s/call但在 4 核心 + 高 load 系統上會拖垮效能,**不適合作為常態 fallback**。
**容錯層級**(由 `~/clawd/scripts/embed-health.sh` 自動執行cron */30 分鐘2026-03-02 已實作):
| 層級 | 條件 | 動作 |
|------|------|------|
| 正常 | llama-embed port 11435 回應 < 2s | `autoRecall: true`, `autoCapture: true` |
| 降級 | llama-embed 無回應或逾時 | 自動設定 `autoRecall: false`, `autoCapture: false`Telegram 通知使用者 |
| 恢復 | 重開機後 llama-embed 恢復 | 自動設定 `autoRecall: true`, `autoCapture: true`Telegram 通知 |
**設計原則**
- 不使用 Ollama CPU fallbackCPU 資源不足)
- 不使用線上 embedding API隱私考量 + 增加外部依賴)
- embedding 掛了 = 記憶暫停,不影響 Bot 核心回覆功能
- 健康檢查腳本放入 crontab 每 30 分鐘執行