Gateway
การแก้ไขปัญหา
นี่คือคู่มือปฏิบัติงานเชิงลึก เริ่มที่ /help/troubleshooting เพื่อทำตามขั้นตอนการคัดกรองปัญหาแบบรวดเร็วก่อน
ลำดับคำสั่ง
เรียกใช้ตามลำดับนี้:
openclaw statusopenclaw gateway statusopenclaw logs --followopenclaw doctoropenclaw channels status --probeสัญญาณที่บ่งชี้ว่าระบบทำงานเป็นปกติ:
openclaw gateway statusแสดงRuntime: running,Connectivity probe: okและบรรทัดCapability: ...openclaw doctorรายงานว่าไม่มีปัญหาการกำหนดค่าหรือบริการที่ขัดขวางการทำงานopenclaw channels status --probeแสดงสถานะการรับส่งข้อมูลแบบสดสำหรับแต่ละบัญชี และแสดงworksหรือaudit okในกรณีที่รองรับ
หลังการอัปเดต
ใช้เมื่อการอัปเดตเสร็จสิ้นแล้ว แต่ Gateway หยุดทำงาน ช่องไม่มีข้อมูล หรือการเรียกโมเดลล้มเหลวด้วยข้อผิดพลาด 401
openclaw status --allopenclaw update status --jsonopenclaw gateway status --deepopenclaw doctor --fixopenclaw gateway restartตรวจสอบสิ่งต่อไปนี้:
Update restartในopenclaw status/openclaw status --allการส่งต่องานที่รอดำเนินการหรือล้มเหลวจะระบุคำสั่งถัดไปที่ต้องเรียกใช้plugin load failed: dependency tree corrupted; run openclaw doctor --fixใต้ Channels: การกำหนดค่าช่องยังคงอยู่ แต่การลงทะเบียน Plugin ล้มเหลวก่อนที่จะโหลดช่องได้- ข้อผิดพลาด 401 จากผู้ให้บริการหลังยืนยันตัวตนอีกครั้ง:
openclaw doctor --fixตรวจหาเงาข้อมูลยืนยันตัวตน OAuth ที่ล้าสมัยของแต่ละเอเจนต์และนำสำเนาเก่าออก เพื่อให้เอเจนต์ทั้งหมดเลือกใช้โปรไฟล์ที่แชร์ร่วมกันในปัจจุบัน
การติดตั้งที่แยกกันทำงานและกลไกป้องกันการกำหนดค่าจากเวอร์ชันใหม่กว่า
ใช้เมื่อบริการ Gateway หยุดทำงานโดยไม่คาดคิดหลังการอัปเดต หรือบันทึกแสดงว่าไบนารี openclaw หนึ่งรายการเก่ากว่าเวอร์ชันที่เขียน openclaw.json ครั้งล่าสุด
OpenClaw ประทับเวอร์ชันลงในการเขียนการกำหนดค่าด้วย meta.lastTouchedVersion คำสั่งแบบอ่านอย่างเดียวสามารถตรวจสอบการกำหนดค่าที่เขียนโดย OpenClaw เวอร์ชันใหม่กว่าได้ แต่การเปลี่ยนแปลงกระบวนการและบริการจะไม่ยอมทำงานจากไบนารีเวอร์ชันเก่ากว่า การดำเนินการที่ถูกบล็อก ได้แก่ การเริ่ม/หยุด/เริ่มใหม่/ถอนการติดตั้งบริการ Gateway, การบังคับติดตั้งบริการใหม่, การเริ่ม Gateway ในโหมดบริการ และการล้างพอร์ต gateway --force
which openclawopenclaw --versionopenclaw gateway status --deepopenclaw config get meta.lastTouchedVersionแก้ไข PATH
แก้ไข PATH เพื่อให้ openclaw ชี้ไปยังการติดตั้งที่ใหม่กว่า แล้วเรียกใช้การดำเนินการอีกครั้ง
ติดตั้งบริการ Gateway ใหม่
ติดตั้งบริการ Gateway ที่ต้องการอีกครั้งจากการติดตั้งที่ใหม่กว่า:
openclaw gateway install --forceopenclaw gateway restartนำตัวห่อหุ้มที่ล้าสมัยออก
นำรายการแพ็กเกจระบบหรือตัวห่อหุ้มเก่าที่ยังคงชี้ไปยังไบนารี openclaw เวอร์ชันเก่าออก
โปรโตคอลไม่ตรงกันหลังย้อนกลับ
ใช้เมื่อบันทึกยังคงแสดง protocol mismatch หลังการดาวน์เกรดหรือย้อนกลับ Gateway เวอร์ชันเก่ากำลังทำงานอยู่ แต่กระบวนการไคลเอนต์ในเครื่องเวอร์ชันใหม่กว่ายังคงเชื่อมต่อใหม่ด้วยช่วงโปรโตคอลที่ Gateway เวอร์ชันเก่าไม่รองรับ
openclaw --versionwhich -a openclawopenclaw gateway status --deepopenclaw doctor --deepopenclaw logs --followตรวจสอบสิ่งต่อไปนี้:
protocol mismatch ... client=... v<version> min=<n> max=<n> expected=<n>ในบันทึกของ GatewayEstablished clients:ในopenclaw gateway status --deepหรือGateway clientsในopenclaw doctor --deep: ไคลเอนต์ TCP ที่ใช้งานอยู่และเชื่อมต่อกับพอร์ต Gateway พร้อม PID และบรรทัดคำสั่งเมื่อระบบปฏิบัติการอนุญาต- กระบวนการไคลเอนต์ที่บรรทัดคำสั่งชี้ไปยังการติดตั้งหรือตัวห่อหุ้ม OpenClaw เวอร์ชันใหม่กว่าที่คุณย้อนกลับมา
วิธีแก้ไข:
- หยุดหรือเริ่มกระบวนการไคลเอนต์ OpenClaw ที่ล้าสมัยซึ่ง
gateway status --deepแสดงขึ้นมาใหม่ - เริ่มแอปหรือตัวห่อหุ้มที่ฝัง OpenClaw ใหม่ ได้แก่ แดชบอร์ดในเครื่อง ตัวแก้ไข ตัวช่วยแอปเซิร์ฟเวอร์ หรือเชลล์
openclaw logs --followที่ทำงานเป็นเวลานาน - เรียกใช้
openclaw gateway status --deepหรือopenclaw doctor --deepอีกครั้ง และยืนยันว่า PID ของไคลเอนต์ที่ล้าสมัยหายไปแล้ว
อย่าทำให้ Gateway เวอร์ชันเก่ายอมรับโปรโตคอลเวอร์ชันใหม่กว่าที่เข้ากันไม่ได้ การเพิ่มเวอร์ชันโปรโตคอลช่วยปกป้องสัญญาการสื่อสารผ่านสาย ส่วนการกู้คืนหลังย้อนกลับเป็นปัญหาที่ต้องล้างกระบวนการและเวอร์ชัน
ข้าม symlink ของ Skill เนื่องจากออกนอกขอบเขตพาธ
ใช้เมื่อบันทึกมีข้อความ:
ข้ามพาธ Skill ที่ออกนอกขอบเขตรูทที่กำหนดค่าไว้: ... reason=symlink-escapeรูทของ Skill ทุกแห่งเป็นขอบเขตจำกัดพื้นที่ symlink ภายใต้ ~/.agents/skills, <workspace>/.agents/skills, <workspace>/skills หรือ ~/.openclaw/skills จะถูกข้ามเมื่อเป้าหมายจริงชี้ออกนอกรูทนั้น เว้นแต่เป้าหมายดังกล่าวได้รับความเชื่อถืออย่างชัดเจน
ตรวจสอบลิงก์:
ls -l ~/.agents/skills/<name>realpath ~/.agents/skills/<name>openclaw config get skills.loadหากตั้งใจใช้เป้าหมายนั้น ให้กำหนดค่าทั้งรูทของ Skill โดยตรงและเป้าหมาย symlink ที่อนุญาต:
{ skills: { load: { extraDirs: ["~/Projects/manager/skills"], allowSymlinkTargets: ["~/Projects/manager/skills"], }, },}จากนั้นเริ่มเซสชันใหม่หรือรอให้ตัวเฝ้าดู Skills รีเฟรช เริ่ม Gateway ใหม่หากกระบวนการที่กำลังทำงานเริ่มต้นขึ้นก่อนมีการเปลี่ยนแปลงการกำหนดค่า
อย่าใช้เป้าหมายที่กว้าง เช่น ~, / หรือทั้งโฟลเดอร์โครงการที่ซิงค์ไว้ จำกัดขอบเขต allowSymlinkTargets ไว้เฉพาะรูทของ Skill จริงซึ่งมีไดเรกทอรี SKILL.md ที่เชื่อถือได้
หากการนำการเปลี่ยนแปลงจาก Skill Workshop ไปใช้ควรเขียนผ่านพาธ Skill ในพื้นที่ทำงานที่เป็น symlink และได้รับความเชื่อถือเหล่านั้นด้วย ให้เปิดใช้ skills.workshop.allowSymlinkTargetWrites ปิดไว้สำหรับรูทของ Skill ที่แชร์ร่วมกันแบบอ่านอย่างเดียว
ข้อมูลที่เกี่ยวข้อง:
Anthropic 429 ต้องใช้สิทธิ์การใช้งานเพิ่มเติมสำหรับบริบทยาว
ใช้เมื่อบันทึกหรือข้อผิดพลาดมีข้อความ: HTTP 429: rate_limit_error: Extra usage is required for long context requests
openclaw logs --followopenclaw models statusopenclaw config get agents.defaults.modelsตรวจสอบสิ่งต่อไปนี้:
- โมเดล Anthropic ที่เลือกเป็นโมเดล Claude 4.x ที่รองรับ 1M แบบ GA (Opus 4.6/4.7/4.8, Sonnet 4.6) หรือการกำหนดค่าโมเดลยังคงมี
params.context1m: trueแบบเดิม - ข้อมูลประจำตัว Anthropic ปัจจุบันไม่มีสิทธิ์ใช้งานบริบทยาว
- คำขอล้มเหลวเฉพาะในเซสชันหรือการเรียกใช้โมเดลที่ยาวและต้องใช้เส้นทางบริบท 1M
ตัวเลือกในการแก้ไข:
ใช้หน้าต่างบริบทมาตรฐาน
เปลี่ยนไปใช้โมเดลที่มีหน้าต่างมาตรฐาน หรือนำ context1m แบบเดิมออกจาก
การกำหนดค่าโมเดลเก่าที่ไม่รองรับบริบท 1M แบบ GA
ใช้ข้อมูลประจำตัวที่มีสิทธิ์
ใช้ข้อมูลประจำตัว Anthropic ที่มีสิทธิ์ส่งคำขอบริบทยาว หรือเปลี่ยนไปใช้คีย์ API ของ Anthropic
กำหนดค่าโมเดลสำรอง
กำหนดค่าโมเดลสำรองเพื่อให้การทำงานดำเนินต่อเมื่อคำขอบริบทยาวของ Anthropic ถูกปฏิเสธ
ข้อมูลที่เกี่ยวข้อง:
การตอบกลับ 403 ที่ถูกบล็อกจากระบบต้นทาง
ใช้เมื่อผู้ให้บริการ LLM ต้นทางส่งคืน 403 ทั่วไป เช่น Your request was blocked
อย่าสันนิษฐานว่านี่เป็นปัญหาการกำหนดค่า OpenClaw เสมอไป การตอบกลับอาจมาจากชั้นความปลอดภัยต้นทาง เช่น CDN, WAF, กฎการจัดการบอต หรือพร็อกซีย้อนกลับที่อยู่หน้าเอ็นด์พอยต์ที่เข้ากันได้กับ OpenAI
openclaw statusopenclaw gateway statusopenclaw logs --followตรวจสอบสิ่งต่อไปนี้:
- โมเดลหลายรายการภายใต้ผู้ให้บริการเดียวกันล้มเหลวในลักษณะเดียวกัน
- มี HTML หรือข้อความความปลอดภัยทั่วไปแทนข้อผิดพลาด API ตามปกติของผู้ให้บริการ
- มีเหตุการณ์ด้านความปลอดภัยฝั่งผู้ให้บริการในเวลาเดียวกับคำขอ
- การตรวจสอบ
curlโดยตรงขนาดเล็กมากสำเร็จ แต่คำขอที่มีรูปแบบตาม SDK ตามปกติล้มเหลว
แก้ไขการกรองฝั่งผู้ให้บริการก่อนเมื่อหลักฐานชี้ว่าเกิดการบล็อกจาก WAF/CDN ควรใช้กฎอนุญาตหรือข้ามที่จำกัดขอบเขตอย่างแคบสำหรับพาธ API ที่ OpenClaw ใช้ และหลีกเลี่ยงการปิดการป้องกันทั้งเว็บไซต์
ข้อมูลที่เกี่ยวข้อง:
แบ็กเอนด์ในเครื่องที่เข้ากันได้กับ OpenAI ผ่านการตรวจสอบโดยตรง แต่การทำงานของเอเจนต์ล้มเหลว
ใช้เมื่อ:
curl ... /v1/modelsทำงานได้- การเรียก
/v1/chat/completionsโดยตรงขนาดเล็กทำงานได้ - การเรียกใช้โมเดล OpenClaw ล้มเหลวเฉพาะในรอบการทำงานตามปกติของเอเจนต์
curl http://127.0.0.1:1234/v1/modelscurl http://127.0.0.1:1234/v1/chat/completions \ -H 'content-type: application/json' \ -d '{"model":"<id>","messages":[{"role":"user","content":"hi"}],"stream":false}'openclaw infer model run --model <provider/model> --prompt "hi" --jsonopenclaw logs --followตรวจสอบสิ่งต่อไปนี้:
- การเรียกโดยตรงขนาดเล็กสำเร็จ แต่การทำงานของ OpenClaw ล้มเหลวเฉพาะเมื่อใช้พรอมต์ขนาดใหญ่ขึ้น
model_not_foundหรือข้อผิดพลาด 404 แม้ว่า/v1/chat/completionsโดยตรงจะทำงานได้ด้วยรหัสโมเดลเปล่าเดียวกัน- ข้อผิดพลาดของแบ็กเอนด์ที่ระบุว่า
messages[].contentต้องเป็นสตริง - คำเตือน
incomplete turn detected ... stopReason=stop payloads=0ที่เกิดขึ้นเป็นระยะกับแบ็กเอนด์ในเครื่องที่เข้ากันได้กับ OpenAI - แบ็กเอนด์ขัดข้องเฉพาะเมื่อมีจำนวนโทเค็นพรอมต์มากขึ้นหรือใช้พรอมต์รันไทม์ของเอเจนต์แบบเต็ม
ลักษณะอาการที่พบบ่อย
model_not_foundกับเซิร์ฟเวอร์ในเครื่องรูปแบบ MLX/vLLM: ตรวจสอบว่าbaseUrlมี/v1,apiเป็น"openai-completions"สำหรับแบ็กเอนด์/v1/chat/completionsและmodels.providers.<provider>.models[].idเป็นรหัสเฉพาะของผู้ให้บริการแบบเปล่า เลือกโดยใช้คำนำหน้าผู้ให้บริการเพียงครั้งเดียว เช่นmlx/mlx-community/Qwen3-30B-A3B-6bit; เก็บรายการแค็ตตาล็อกเป็นmlx-community/Qwen3-30B-A3B-6bitmessages[...].content: invalid type: sequence, expected a string: แบ็กเอนด์ปฏิเสธส่วนเนื้อหา Chat Completions แบบมีโครงสร้าง วิธีแก้ไข: ตั้งค่าmodels.providers.<provider>.models[].compat.requiresStringContent: truevalidation.keysหรือคีย์ข้อความที่อนุญาต เช่น["role","content"]: แบ็กเอนด์ปฏิเสธข้อมูลเมตาการเล่นซ้ำแบบ OpenAI ในข้อความ Chat Completions วิธีแก้ไข: ตั้งค่าmodels.providers.<provider>.models[].compat.strictMessageKeys: trueincomplete turn detected ... stopReason=stop payloads=0: แบ็กเอนด์ประมวลผลคำขอ Chat Completions เสร็จสิ้นแล้ว แต่ไม่ส่งคืนข้อความของผู้ช่วยที่ผู้ใช้มองเห็นได้สำหรับรอบนั้น OpenClaw ลองเล่นซ้ำรอบที่ว่างเปล่าและปลอดภัยต่อการเล่นซ้ำซึ่งเข้ากันได้กับ OpenAI อีกหนึ่งครั้ง ความล้มเหลวที่ยังคงเกิดขึ้นมักหมายความว่าแบ็กเอนด์กำลังส่งเนื้อหาว่าง/ไม่ใช่ข้อความ หรือระงับข้อความคำตอบสุดท้าย- คำขอโดยตรงขนาดเล็กสำเร็จ แต่การทำงานของเอเจนต์ OpenClaw ล้มเหลวด้วยการขัดข้องของแบ็กเอนด์/โมเดล (ตัวอย่างเช่น Gemma ในบิลด์
inferrsบางรุ่น): การรับส่งข้อมูลของ OpenClaw มีแนวโน้มว่าถูกต้องอยู่แล้ว แต่แบ็กเอนด์ล้มเหลวเมื่อพบรูปแบบพรอมต์รันไทม์ของเอเจนต์ที่มีขนาดใหญ่กว่า - ความล้มเหลวลดลงหลังปิดใช้เครื่องมือแต่ไม่หายไป: สคีมาของเครื่องมือเป็นส่วนหนึ่งของภาระ แต่ปัญหาที่เหลือยังคงเป็นความจุของโมเดล/เซิร์ฟเวอร์ต้นทางหรือข้อบกพร่องของแบ็กเอนด์
ตัวเลือกในการแก้ไข
- ตั้งค่า
compat.requiresStringContent: trueสำหรับแบ็กเอนด์ Chat Completions ที่รองรับเฉพาะสตริง - ตั้งค่า
compat.strictMessageKeys: trueสำหรับแบ็กเอนด์ Chat Completions แบบเข้มงวดที่ยอมรับเฉพาะroleและcontentในแต่ละข้อความ - ตั้งค่า
compat.supportsTools: falseสำหรับโมเดล/แบ็กเอนด์ที่ไม่สามารถจัดการพื้นผิวสคีมาเครื่องมือของ OpenClaw ได้อย่างน่าเชื่อถือ - ลดภาระของพรอมต์เมื่อทำได้: ใช้การเริ่มต้นพื้นที่ทำงานที่เล็กลง ประวัติเซสชันที่สั้นลง โมเดลในเครื่องที่เบากว่า หรือแบ็กเอนด์ที่รองรับบริบทยาวได้ดีกว่า
- หากคำขอโดยตรงขนาดเล็กยังคงสำเร็จ แต่รอบการทำงานของเอเจนต์ OpenClaw ยังทำให้แบ็กเอนด์ขัดข้อง ให้ถือว่าเป็นข้อจำกัดของเซิร์ฟเวอร์/โมเดลต้นทาง และส่งกรณีจำลองปัญหาไปยังโครงการนั้นพร้อมรูปแบบเพย์โหลดที่ระบบยอมรับ
ข้อมูลที่เกี่ยวข้อง:
ไม่มีการตอบกลับ
หากช่องทางทำงานอยู่แต่ไม่มีการตอบกลับ ให้ตรวจสอบการกำหนดเส้นทางและนโยบายก่อนเชื่อมต่อสิ่งใดใหม่
openclaw statusopenclaw channels status --probeopenclaw pairing list --channel <channel> [--account <id>]openclaw config get channelsopenclaw logs --followตรวจหา:
- การจับคู่ที่รอดำเนินการสำหรับผู้ส่งข้อความส่วนตัว
- การจำกัดด้วยการกล่าวถึงในกลุ่ม (
requireMention,mentionPatterns) - รายการอนุญาตของช่องทาง/กลุ่มไม่ตรงกัน
รูปแบบที่พบบ่อย:
drop guild message (mention required→ ระบบจะเพิกเฉยต่อข้อความกลุ่มจนกว่าจะมีการกล่าวถึงpairing request→ ผู้ส่งต้องได้รับการอนุมัติblocked/allowlist→ ผู้ส่ง/ช่องทางถูกกรองโดยนโยบาย
หัวข้อที่เกี่ยวข้อง:
การเชื่อมต่อ UI ควบคุมของแดชบอร์ด
เมื่อแดชบอร์ด/UI ควบคุมเชื่อมต่อไม่ได้ ให้ตรวจสอบ URL, โหมดการยืนยันตัวตน และข้อกำหนดเกี่ยวกับบริบทที่ปลอดภัย
openclaw gateway statusopenclaw statusopenclaw logs --followopenclaw doctoropenclaw gateway status --jsonตรวจหา:
- URL สำหรับตรวจสอบและ URL ของแดชบอร์ดที่ถูกต้อง
- โหมดการยืนยันตัวตน/โทเค็นระหว่างไคลเอ็นต์กับ Gateway ไม่ตรงกัน
- มีการใช้ HTTP ในกรณีที่ต้องใช้ข้อมูลประจำตัวของอุปกรณ์
หากเบราว์เซอร์ภายในเครื่องเชื่อมต่อกับ 127.0.0.1:18789 ไม่ได้หลังการอัปเดต ให้กู้คืนบริการ Gateway ภายในเครื่องก่อน และยืนยันว่าบริการกำลังให้บริการแดชบอร์ด:
openclaw gateway restartlsof -i :18789curl http://127.0.0.1:18789หาก curl ส่งคืน HTML ของ OpenClaw แสดงว่า Gateway ทำงานอยู่ และปัญหาที่เหลือน่าจะเกิดจากแคชของเบราว์เซอร์ ดีปลิงก์เก่า หรือสถานะแท็บที่ค้างอยู่ เปิด http://127.0.0.1:18789 โดยตรงแล้วนำทางจากแดชบอร์ด หากหลังรีสตาร์ตบริการไม่ทำงานต่อ ให้เรียกใช้ openclaw gateway start และตรวจสอบ openclaw gateway status อีกครั้ง
รูปแบบการเชื่อมต่อ/การยืนยันตัวตน
device identity required→ บริบทไม่ปลอดภัยหรือไม่มีการยืนยันตัวตนของอุปกรณ์origin not allowed→Originของเบราว์เซอร์ไม่อยู่ในgateway.controlUi.allowedOrigins(หรือกำลังเชื่อมต่อจากต้นทางเบราว์เซอร์ที่ไม่ใช่ลูปแบ็กโดยไม่มีรายการอนุญาตที่ระบุไว้อย่างชัดเจน)device nonce required/device nonce mismatch→ ไคลเอ็นต์ดำเนินขั้นตอนการยืนยันตัวตนอุปกรณ์แบบใช้คำท้าไม่สมบูรณ์ (connect.challenge+device.nonce)device signature invalid/device signature expired→ ไคลเอ็นต์ลงนามเพย์โหลดผิด (หรือใช้การประทับเวลาที่ล้าสมัย) สำหรับการจับมือปัจจุบันAUTH_TOKEN_MISMATCHพร้อมcanRetryWithDeviceToken=true→ ไคลเอ็นต์สามารถลองใหม่แบบเชื่อถือได้หนึ่งครั้งโดยใช้โทเค็นอุปกรณ์ที่แคชไว้- การลองใหม่ด้วยโทเค็นที่แคชไว้นั้นจะใช้ชุดขอบเขตที่แคชไว้ซึ่งจัดเก็บร่วมกับโทเค็นอุปกรณ์ที่จับคู่แล้วซ้ำ ส่วนผู้เรียกที่ระบุ
deviceToken/scopesอย่างชัดเจนจะคงชุดขอบเขตที่ร้องขอไว้ AUTH_SCOPE_MISMATCH→ ระบบรู้จักโทเค็นอุปกรณ์ แต่ขอบเขตที่ได้รับอนุมัติไม่ครอบคลุมคำขอเชื่อมต่อนี้ ให้จับคู่ใหม่หรืออนุมัติสัญญาขอบเขตที่ร้องขอ แทนการหมุนเวียนโทเค็น Gateway ที่ใช้ร่วมกัน- นอกเส้นทางการลองใหม่นั้น ลำดับความสำคัญของการยืนยันตัวตนขณะเชื่อมต่อคือ โทเค็น/รหัสผ่านที่ใช้ร่วมกันซึ่งระบุไว้อย่างชัดเจนก่อน ตามด้วย
deviceTokenที่ระบุไว้อย่างชัดเจน จากนั้นเป็นโทเค็นอุปกรณ์ที่จัดเก็บไว้ และสุดท้ายเป็นโทเค็นบูตสแตรป - ในเส้นทาง UI ควบคุมแบบ Tailscale Serve ที่ทำงานแบบอะซิงโครนัส ความพยายามที่ล้มเหลวสำหรับ
{scope, ip}เดียวกันจะถูกจัดลำดับก่อนที่ตัวจำกัดจะบันทึกความล้มเหลว ดังนั้นการลองใหม่ที่ผิดพลาดพร้อมกันสองครั้งจากไคลเอ็นต์เดียวกันอาจแสดงretry laterในความพยายามครั้งที่สอง แทนที่จะแสดงข้อผิดพลาดไม่ตรงกันแบบธรรมดาสองครั้ง too many failed authentication attempts (retry later)จากไคลเอ็นต์ลูปแบ็กที่มีต้นทางเป็นเบราว์เซอร์ → ความล้มเหลวซ้ำจากOriginที่ปรับรูปแบบแล้วเดียวกันจะถูกล็อกชั่วคราว ส่วนต้นทาง localhost อื่นจะใช้บัคเก็ตแยกต่างหาก- เกิด
unauthorizedซ้ำหลังจากการลองใหม่นั้น → โทเค็นที่ใช้ร่วมกันกับโทเค็นอุปกรณ์ไม่สอดคล้องกัน ให้อัปเดตการกำหนดค่าโทเค็นและอนุมัติใหม่/หมุนเวียนโทเค็นอุปกรณ์หากจำเป็น gateway connect failed:→ เป้าหมายโฮสต์/พอร์ต/URL ไม่ถูกต้อง
แผนผังด่วนของรหัสรายละเอียดการยืนยันตัวตน
ใช้ error.details.code จากการตอบกลับ connect ที่ล้มเหลวเพื่อเลือกการดำเนินการถัดไป:
| รหัสรายละเอียด | ความหมาย | การดำเนินการที่แนะนำ |
|---|---|---|
AUTH_TOKEN_MISSING |
ไคลเอ็นต์ไม่ได้ส่งโทเค็นที่ใช้ร่วมกันซึ่งจำเป็น | วาง/ตั้งค่าโทเค็นในไคลเอ็นต์แล้วลองใหม่ สำหรับเส้นทางแดชบอร์ด: openclaw config get gateway.auth.token จากนั้นวางลงในการตั้งค่า UI ควบคุม |
AUTH_TOKEN_MISMATCH |
โทเค็นที่ใช้ร่วมกันไม่ตรงกับโทเค็นยืนยันตัวตนของ Gateway | หาก canRetryWithDeviceToken=true ให้อนุญาตการลองใหม่แบบเชื่อถือได้หนึ่งครั้ง การลองใหม่ด้วยโทเค็นที่แคชไว้จะใช้ขอบเขตที่ได้รับอนุมัติและจัดเก็บไว้ซ้ำ ส่วนผู้เรียกที่ระบุ deviceToken / scopes อย่างชัดเจนจะคงขอบเขตที่ร้องขอ หากยังล้มเหลว ให้ทำตาม รายการตรวจสอบการกู้คืนโทเค็นที่ไม่สอดคล้องกัน |
AUTH_DEVICE_TOKEN_MISMATCH |
โทเค็นประจำอุปกรณ์ที่แคชไว้ล้าสมัยหรือถูกเพิกถอน | หมุนเวียน/อนุมัติโทเค็นอุปกรณ์ใหม่โดยใช้ CLI สำหรับอุปกรณ์ แล้วเชื่อมต่อใหม่ |
AUTH_SCOPE_MISMATCH |
โทเค็นอุปกรณ์ถูกต้อง แต่บทบาท/ขอบเขตที่ได้รับอนุมัติไม่ครอบคลุมคำขอเชื่อมต่อนี้ | จับคู่อุปกรณ์ใหม่หรืออนุมัติสัญญาขอบเขตที่ร้องขอ อย่าถือว่ากรณีนี้เป็นโทเค็นที่ใช้ร่วมกันไม่สอดคล้องกัน |
PAIRING_REQUIRED |
ข้อมูลประจำตัวของอุปกรณ์ต้องได้รับการอนุมัติ ตรวจสอบ error.details.reason สำหรับ not-paired, scope-upgrade, role-upgrade หรือ metadata-upgrade และใช้ requestId / remediationHint เมื่อมี |
อนุมัติคำขอที่รอดำเนินการ: openclaw devices list แล้วตามด้วย openclaw devices approve <requestId> การอัปเกรดขอบเขต/บทบาทใช้ขั้นตอนเดียวกันหลังจากตรวจสอบสิทธิ์เข้าถึงที่ร้องขอแล้ว |
การตรวจสอบการย้ายข้อมูลการยืนยันตัวตนอุปกรณ์ v2:
openclaw --versionopenclaw doctoropenclaw gateway statusหากบันทึกแสดงข้อผิดพลาด nonce/ลายเซ็น ให้อัปเดตไคลเอ็นต์ที่เชื่อมต่อและตรวจสอบดังนี้:
รอ connect.challenge
ไคลเอ็นต์รอ connect.challenge ที่ Gateway ออกให้
ลงนามเพย์โหลด
ไคลเอ็นต์ลงนามเพย์โหลดที่ผูกกับคำท้า
ส่ง nonce ของอุปกรณ์
ไคลเอ็นต์ส่ง connect.params.device.nonce พร้อม nonce ของคำท้าเดียวกัน
หาก openclaw devices rotate / revoke / remove ถูกปฏิเสธโดยไม่คาดคิด:
- เซสชันโทเค็นอุปกรณ์ที่จับคู่สามารถจัดการได้เฉพาะอุปกรณ์ ของตนเอง เว้นแต่ผู้เรียกจะมี
operator.adminด้วย openclaw devices rotate --scope ...สามารถร้องขอได้เฉพาะขอบเขตผู้ปฏิบัติงานที่เซสชันของผู้เรียกมีอยู่แล้วเท่านั้น
หัวข้อที่เกี่ยวข้อง:
- การกำหนดค่า (โหมดการยืนยันตัวตนของ Gateway)
- UI ควบคุม
- อุปกรณ์
- การเข้าถึงจากระยะไกล
- การยืนยันตัวตนผ่านพร็อกซีที่เชื่อถือได้
บริการ Gateway ไม่ทำงาน
ใช้เมื่อบริการติดตั้งแล้ว แต่กระบวนการทำงานไม่ต่อเนื่อง
openclaw gateway statusopenclaw statusopenclaw logs --followopenclaw doctoropenclaw gateway status --deep # ตรวจสอบบริการระดับระบบด้วยตรวจหา:
Runtime: stoppedพร้อมคำใบ้เกี่ยวกับการออกจากกระบวนการ- การกำหนดค่าบริการไม่ตรงกัน (
Config (cli)กับConfig (service)) - พอร์ต/ตัวรับฟังขัดแย้งกัน
- มีการติดตั้ง launchd/systemd/schtasks เพิ่มเติมเมื่อใช้
--deep - คำใบ้การล้างข้อมูล
Other gateway-like services detected (best effort)
รูปแบบที่พบบ่อย
Gateway start blocked: set gateway.mode=localหรือexisting config is missing gateway.mode→ ไม่ได้เปิดใช้งานโหมด Gateway ภายในเครื่อง หรือไฟล์การกำหนดค่าถูกเขียนทับจนสูญเสียgateway.modeวิธีแก้ไข: ตั้งค่าgateway.mode="local"ในการกำหนดค่า หรือเรียกใช้openclaw onboard --mode local/openclaw setupอีกครั้งเพื่อประทับการกำหนดค่าโหมดภายในเครื่องที่คาดไว้ใหม่ หากเรียกใช้ OpenClaw ผ่าน Podman พาธการกำหนดค่าเริ่มต้นคือ~/.openclaw/openclaw.jsonrefusing to bind gateway ... without auth→ ผูกกับที่อยู่ที่ไม่ใช่ลูปแบ็กโดยไม่มีเส้นทางการยืนยันตัวตน Gateway ที่ถูกต้อง (โทเค็น/รหัสผ่าน หรือพร็อกซีที่เชื่อถือได้เมื่อตั้งค่าไว้)another gateway instance is already listening/EADDRINUSE→ พอร์ตขัดแย้งกันOther gateway-like services detected (best effort)→ มีหน่วย launchd/systemd/schtasks ที่ล้าสมัยหรือทำงานคู่ขนานอยู่ การตั้งค่าส่วนใหญ่ควรมี Gateway หนึ่งรายการต่อเครื่อง หากจำเป็นต้องมีมากกว่าหนึ่งรายการ ให้แยกพอร์ต + การกำหนดค่า/สถานะ/พื้นที่ทำงาน ดู /gateway#multiple-gateways-same-hostSystem-level OpenClaw gateway service detectedจาก doctor → มีหน่วยระบบ systemd อยู่ แต่ไม่มีบริการระดับผู้ใช้ ลบหรือปิดใช้งานรายการที่ซ้ำก่อนอนุญาตให้ doctor ติดตั้งบริการผู้ใช้ หรือตั้งค่าOPENCLAW_SERVICE_REPAIR_POLICY=externalหากต้องการใช้หน่วยระบบเป็นตัวควบคุมกระบวนการGateway service port does not match current gateway config→ ตัวควบคุมกระบวนการที่ติดตั้งไว้ยังคงตรึง--portเก่า เรียกใช้openclaw doctor --fixหรือopenclaw gateway install --forceแล้วรีสตาร์ตบริการ Gateway
หัวข้อที่เกี่ยวข้อง:
Gateway บน macOS หยุดตอบสนองโดยไม่มีข้อความแจ้ง แล้วกลับมาทำงานต่อเมื่อโต้ตอบกับแดชบอร์ด
ใช้เมื่อช่องทางต่าง ๆ (Telegram, WhatsApp เป็นต้น) บนโฮสต์ macOS เงียบหายไปครั้งละหลายนาทีถึงหลายชั่วโมง และดูเหมือนว่า Gateway จะกลับมาทันทีที่เปิด Control UI, เชื่อมต่อผ่าน SSH หรือโต้ตอบกับโฮสต์ด้วยวิธีอื่น โดยปกติจะไม่พบอาการที่ชัดเจนใน openclaw status เพราะเมื่อเข้าไปตรวจสอบ Gateway ก็กลับมาทำงานแล้ว
ls ~/.openclaw/logs/stability/ | tail -5openclaw gateway stability --bundle latestpmset -g log | grep -iE "sleep|wake|maintenance" | tail -50launchctl print gui/$UID/ai.openclaw.gateway | grep -E "state|last exit|runs"ให้มองหาสิ่งต่อไปนี้:
- บันเดิล
*-uncaught_exception.jsonอย่างน้อยหนึ่งรายการใน~/.openclaw/logs/stability/ซึ่งตั้งค่าerror.codeเป็นรหัสเครือข่ายชั่วคราว เช่นENETDOWN,ENETUNREACH,EHOSTUNREACHหรือECONNREFUSED - บรรทัด
pmset -g logเช่นEntering Sleep state due to 'Maintenance Sleep'หรือen0 driver is slow (msg: WillChangeState to 0)ที่ตรงกับการประทับเวลาของการขัดข้อง Power Nap / Maintenance Sleep จะทำให้ไดรเวอร์ Wi-Fi เข้าสู่สถานะ 0 ชั่วครู่ การเชื่อมต่อconnect()ขาออกใด ๆ ที่เกิดขึ้นในช่วงนั้นอาจล้มเหลวด้วยENETDOWNแม้ว่าโดยปกติโฮสต์จะเชื่อมต่อเครือข่ายได้อย่างสมบูรณ์ - เอาต์พุต
launchctl printที่แสดงstate = not runningพร้อมrunsหลายรายการที่เพิ่งเกิดขึ้นและรหัสออก โดยเฉพาะเมื่อช่วงเวลาระหว่างการขัดข้องกับการเริ่มทำงานครั้งถัดไปอยู่ในระดับหนึ่งชั่วโมงแทนที่จะเป็นไม่กี่วินาที launchd ของ macOS ใช้กลไกป้องกันการเกิดซ้ำซึ่งไม่มีการบันทึกไว้หลังจากเกิดการขัดข้องต่อเนื่อง กลไกนี้อาจหยุดทำตามKeepAlive=trueจนกว่าทริกเกอร์ภายนอก เช่น การเข้าสู่ระบบแบบโต้ตอบ การเชื่อมต่อแดชบอร์ด หรือlaunchctl kickstartจะเปิดใช้งานกลไกดังกล่าวอีกครั้ง
ลักษณะที่พบบ่อย:
- บันเดิลความเสถียรที่มี
error.codeเป็นENETDOWNหรือรหัสอื่นในกลุ่มเดียวกัน โดย call stack ชี้ไปที่ NodenetlookupAndConnect/Socket.connectOpenClaw2026.5.26และรุ่นใหม่กว่าจะจัดประเภทข้อผิดพลาดเหล่านี้เป็นข้อผิดพลาดเครือข่ายชั่วคราวที่ไม่เป็นอันตราย จึงไม่ส่งต่อไปยังตัวจัดการข้อยกเว้นระดับบนสุดอีกต่อไป หากใช้รุ่นเก่ากว่า ให้อัปเกรดก่อน - ช่วงเวลาที่เงียบหายเป็นเวลานานและสิ้นสุดลงทันทีที่เชื่อมต่อกับ Control UI หรือ SSH เข้าโฮสต์: กิจกรรมที่ผู้ใช้มองเห็นเป็นสิ่งที่เปิดใช้งานกลไกการเกิดซ้ำของ launchd อีกครั้ง ไม่ใช่การกระทำใด ๆ ของแดชบอร์ดต่อ Gateway
- จำนวน
runsเพิ่มขึ้นตลอดทั้งวันโดยไม่มีบรรทัดreceived SIG*; shutting downที่สอดคล้องกันใน~/Library/Logs/openclaw/gateway.log: การปิดระบบตามปกติจะบันทึกสัญญาณลงในบันทึก แต่การขัดข้องชั่วคราวจะไม่บันทึก
สิ่งที่ต้องทำ:
-
อัปเกรด Gateway หากกำลังใช้รุ่นก่อน
2026.5.26หลังจากอัปเกรดแล้ว ข้อผิดพลาดENETDOWNที่เกิดขึ้นในอนาคตจะถูกบันทึกเป็นคำเตือนแทนที่จะยุติโพรเซส -
ลดกิจกรรมการพักเครื่องเพื่อบำรุงรักษา บนโฮสต์ Mac mini / เดสก์ท็อปที่มีไว้ให้ทำงานเป็นเซิร์ฟเวอร์แบบเปิดตลอดเวลา:
bash sudo pmset -a sleep 0 disksleep 0 standby 0 powernap 0วิธีนี้ช่วยลดความผันผวนของไดรเวอร์ที่เป็นสาเหตุพื้นฐานได้อย่างมาก แต่ไม่สามารถกำจัดได้ทั้งหมด ระบบยังอาจพักเครื่องเพื่อบำรุงรักษาบางส่วนสำหรับ TCP keepalive และการดูแลรักษา mDNS โดยไม่ขึ้นกับแฟล็กเหล่านี้
-
เพิ่มตัวเฝ้าระวังสถานะการทำงาน เพื่อให้ตรวจพบได้อย่างรวดเร็วหากการขัดข้องต่อเนื่องในอนาคตถูก launchd พักไว้:
bash # ตัวอย่างการตรวจสอบสถานะการทำงานที่รองรับ launchd เหมาะสำหรับ Cron หรือ LaunchAgent ที่ทำงานทุก 5 นาทีstate=$(launchctl print gui/$UID/ai.openclaw.gateway 2>/dev/null | awk -F'= ' '/state =/ {print $2; exit}')if [ "$state" != "running" ]; then launchctl kickstart -k gui/$UID/ai.openclaw.gatewayfiจุดประสงค์คือเปิดใช้งานกลไกการเกิดซ้ำจากภายนอกอีกครั้ง โดย
KeepAlive=trueเพียงอย่างเดียวไม่เพียงพอบน macOS หลังจากเกิดการขัดข้องต่อเนื่อง
เนื้อหาที่เกี่ยวข้อง:
ลูปตัวควบคุม launchd ของ macOS เมื่อมี LaunchAgent สำหรับ Gateway/Node ซ้ำกัน
ใช้เมื่อการติดตั้งบน macOS เริ่มทำงานใหม่ทุก ๆ ไม่กี่วินาที การตรวจสอบสถานะ openclaw
สลับไปมาระหว่างพร้อมใช้งานและไม่พร้อมใช้งาน และการส่งข้อมูลผ่านช่องทางหยุดชะงัก
แม้ว่าดูเหมือนว่าบริการกำลังทำงานอยู่ก็ตาม
ปัญหานี้พบในการติดตั้งรุ่นเก่าซึ่งทั้ง ai.openclaw.gateway และ
ai.openclaw.node LaunchAgent ทำงานอยู่ และแต่ละรายการแทรก
OPENCLAW_LAUNCHD_LABEL ในสถานะดังกล่าว OpenClaw อาจตรวจพบการควบคุมโดย launchd
พยายามส่งมอบการเริ่มทำงานใหม่กลับไปให้ launchd และเข้าสู่ลูป
EADDRINUSE/การเกิดซ้ำอย่างรวดเร็ว แทนที่จะมีโพรเซส Gateway ที่เสถียรเพียงหนึ่งโพรเซส
for i in 1 2 3 4; do ps aux | grep 'openclaw.*index.js' | grep -v grep | awk '{print $2}' sleep 10done openclaw gateway status --deepopenclaw node statuslaunchctl print gui/$UID/ai.openclaw.gateway | grep -E 'state|last exit|runs'tail -n 80 ~/Library/Logs/openclaw/gateway.logให้มองหาสิ่งต่อไปนี้:
- มี PID ของ Gateway มากกว่าหนึ่งรายการในตัวอย่างช่วงเวลา 30 วินาที แทนที่จะมี โพรเซสที่เสถียรเพียงหนึ่งโพรเซส
EADDRINUSE,another gateway instance is already listeningหรือบรรทัด การเริ่มทำงานใหม่/การส่งมอบที่เกิดซ้ำในgateway.log- ทั้ง
~/Library/LaunchAgents/ai.openclaw.gateway.plistและ~/Library/LaunchAgents/ai.openclaw.node.plistถูกโหลดพร้อมกันบน โฮสต์ที่ควรเรียกใช้บริการ Gateway ที่มีการจัดการเพียงบริการเดียว
สิ่งที่ต้องทำ:
-
หากโฮสต์นี้ควรเรียกใช้เฉพาะบริการ Gateway ให้ลบบริการ Node ที่มีการจัดการ ผ่าน OpenClaw ข้ามขั้นตอนนี้ หากยังพึ่งพาบริการ Node สำหรับฟีเจอร์ Node ระยะไกลอยู่ การถอนการติดตั้งจะหยุดฟีเจอร์เหล่านั้นบน โฮสต์นี้:
bash openclaw node uninstall -
ติดตั้ง Wrapper ของ Gateway แบบถาวร ซึ่งจะล้างตัวทำเครื่องหมาย launchd ที่สืบทอดมาก่อนเริ่ม OpenClaw ใช้ตัวเลือก
--wrapperที่รองรับ ห้ามแก้ไขไฟล์ที่สร้างขึ้นภายใต้~/.openclaw/service-env/เนื่องจากการติดตั้งบริการใหม่ การอัปเดต และการซ่อมแซมด้วย Doctor จะสร้างไฟล์นั้นขึ้นใหม่:bash mkdir -p ~/.local/bincat >~/.local/bin/openclaw-launchd-workaround <<'EOF'#!/bin/shset -euunset OPENCLAW_LAUNCHD_LABEL LAUNCH_JOB_LABEL LAUNCH_JOB_NAME XPC_SERVICE_NAME || trueexec openclaw "$@"EOFchmod 700 ~/.local/bin/openclaw-launchd-workaround openclaw gateway install \ --wrapper ~/.local/bin/openclaw-launchd-workaround \ --forcegateway installจะเก็บเส้นทางของ wrapper ไว้แม้มีการติดตั้งใหม่แบบบังคับ การอัปเดต และการซ่อมแซมโดย doctor -
ตรวจสอบว่า Gateway ทำงานได้อย่างเสถียรและให้บริการ RPC ไม่ใช่เพียงแค่รับฟังการเชื่อมต่อ:
bash openclaw gateway status --deep --require-rpc for i in 1 2 3 4; do ps aux | grep 'openclaw.*index.js' | grep -v grep | awk '{print $2}' sleep 10doneตัวอย่าง PID ควรแสดงกระบวนการที่เสถียรหนึ่งกระบวนการ แทนที่จะเป็นชุด PID ที่เปลี่ยนวนไปมา และการส่งต่อช่องทางขาเข้าควรกลับมาทำงาน
-
หลังจากอัปเกรดเป็นรุ่นที่แก้ไขลูป LaunchAgent คู่ซึ่งเป็นสาเหตุแล้ว ให้นำวิธีแก้ปัญหาชั่วคราวออกและติดตั้งบริการที่มีการจัดการตามปกติใหม่:
bash OPENCLAW_WRAPPER= openclaw gateway install --forcerm ~/.local/bin/openclaw-launchd-workaround
เนื้อหาที่เกี่ยวข้อง:
Gateway หยุดทำงานระหว่างการใช้หน่วยความจำสูง
ใช้เมื่อ Gateway หายไปขณะมีภาระงานสูง ตัวควบคุมรายงานการรีสตาร์ตในลักษณะ OOM หรือบันทึกกล่าวถึง critical memory pressure bundle written
openclaw gateway status --deepopenclaw logs --followopenclaw gateway stability --bundle latestopenclaw gateway diagnostics exportมองหา:
Reason: diagnostic.memory.pressure.criticalในชุดข้อมูลความเสถียรล่าสุดMemory pressure:ที่มีcritical/rss_threshold,critical/heap_thresholdหรือcritical/rss_growth- ค่า
V8 heap:ที่ใกล้ถึงขีดจำกัดฮีป - รายการ
Largest session files:เช่นagents/<agent>/sessions/<session>.jsonlหรือsessions/<session>.jsonl - ตัวนับหน่วยความจำ cgroup ของ Linux เมื่อ Gateway ทำงานภายในคอนเทนเนอร์หรือบริการที่จำกัดหน่วยความจำ
ลักษณะที่พบบ่อย:
critical memory pressure bundle writtenปรากฏไม่นานก่อนรีสตาร์ต → OpenClaw บันทึกชุดข้อมูลความเสถียรก่อนเกิด OOM ตรวจสอบด้วยopenclaw gateway stability --bundle latestmemory pressure: level=criticalปรากฏในบันทึกของ Gateway → OpenClaw ตรวจพบภาวะหน่วยความจำตึงตัวขั้นวิกฤตและบันทึกข้อมูลหน่วยความจำภายในกระบวนการที่มีอยู่Largest session files:ชี้ไปยังพาธทรานสคริปต์ที่ปกปิดข้อมูลและมีขนาดใหญ่มาก → ลดประวัติเซสชันที่เก็บไว้ ตรวจสอบการเติบโตของเซสชัน หรือย้ายทรานสคริปต์เก่าออกจากที่เก็บที่ใช้งานอยู่ก่อนรีสตาร์ต- จำนวนไบต์ที่ใช้ของ
V8 heap:ใกล้ถึงขีดจำกัดฮีป → ลดภาระจากพรอมต์/เซสชันหรือลดงานที่ทำพร้อมกันก่อน สำหรับบริการที่มีการจัดการ ให้ตรวจสอบGateway heap:ในopenclaw gateway status; หากระบุว่าnot setให้สร้างเมทาดาทาของบริการเก่าใหม่ด้วยopenclaw gateway install --forceระบบจงใจไม่สนใจNODE_OPTIONSของเชลล์แวดล้อม ใช้การกำหนดค่าฮีปทับที่ระดับตัวควบคุมดูแลอย่างชัดเจนเฉพาะหลังจากยืนยันภาระงานต่อเนื่องและเหลือพื้นที่สำรองสำหรับหน่วยความจำเนทีฟเพียงพอแล้ว Memory pressure: critical/rss_growth→ หน่วยความจำเพิ่มขึ้นอย่างรวดเร็วภายในช่วงการสุ่มตัวอย่างหนึ่งช่วง ตรวจสอบบันทึกล่าสุดเพื่อหาการนำเข้าขนาดใหญ่ เอาต์พุตเครื่องมือที่เพิ่มขึ้นไม่หยุด การลองซ้ำหลายครั้ง หรือกลุ่มงานเอเจนต์ที่อยู่ในคิว- ภาวะหน่วยความจำตึงตัวขั้นวิกฤตปรากฏในบันทึกแต่ไม่มีชุดข้อมูล → บันทึก
openclaw gateway diagnostics exportหลังเกิดเหตุการณ์เพื่อเก็บหลักฐานการปฏิบัติงานที่มีอยู่
ชุดข้อมูลความเสถียรไม่มีเพย์โหลด โดยมีหลักฐานหน่วยความจำเชิงปฏิบัติการและพาธไฟล์แบบสัมพัทธ์ที่ปกปิดข้อมูล แต่ไม่มีข้อความ เนื้อหา Webhook ข้อมูลประจำตัว โทเค็น คุกกี้ หรือรหัสเซสชันดิบ ให้แนบไฟล์ส่งออกการวินิจฉัยกับรายงานข้อบกพร่องแทนการคัดลอกบันทึกดิบ
เนื้อหาที่เกี่ยวข้อง:
Gateway ปฏิเสธการกำหนดค่าที่ไม่ถูกต้อง
ใช้เมื่อการเริ่มต้น Gateway ล้มเหลวโดยแสดง Invalid config หรือบันทึกการโหลดใหม่แบบทันทีระบุว่าข้ามการแก้ไขที่ไม่ถูกต้อง
openclaw logs --followopenclaw config fileopenclaw config validateopenclaw doctorมองหา:
Invalid config at ...config reload skipped (invalid config): ...Config write rejected: ...- ไฟล์
openclaw.json.rejected.*ที่มีการประทับเวลาอยู่ข้างการกำหนดค่าที่ใช้งานอยู่ - ไฟล์
openclaw.json.clobbered.*ที่มีการประทับเวลา หากdoctor --fixซ่อมแซมการแก้ไขโดยตรงที่เสียหาย - OpenClaw เก็บไฟล์
.clobbered.*ล่าสุด 32 ไฟล์สำหรับแต่ละพาธการกำหนดค่าและหมุนเวียนไฟล์ที่เก่ากว่าออก
สิ่งที่เกิดขึ้น
- การกำหนดค่าไม่ผ่านการตรวจสอบระหว่างการเริ่มต้น การโหลดใหม่แบบทันที หรือการเขียนที่ OpenClaw เป็นผู้ดำเนินการ
- การเริ่มต้น Gateway ล้มเหลวแบบปิดกั้นแทนที่จะเขียน
openclaw.jsonใหม่ - การโหลดใหม่แบบทันทีจะข้ามการแก้ไขภายนอกที่ไม่ถูกต้องและคงการกำหนดค่ารันไทม์ปัจจุบันให้ทำงานต่อไป
- การเขียนที่ OpenClaw เป็นผู้ดำเนินการจะปฏิเสธเพย์โหลดที่ไม่ถูกต้องหรือก่อให้เกิดความเสียหายก่อนคอมมิต และบันทึก
.rejected.* openclaw doctor --fixทำหน้าที่ซ่อมแซม โดยสามารถลบคำนำหน้าที่ไม่ใช่ JSON หรือกู้คืนสำเนาล่าสุดที่ทราบว่าถูกต้อง พร้อมเก็บรักษาเพย์โหลดที่ถูกปฏิเสธเป็น.clobbered.*- เมื่อมีการซ่อมแซมจำนวนมากสำหรับพาธการกำหนดค่าหนึ่งพาธ OpenClaw จะหมุนเวียนไฟล์
.clobbered.*ที่เก่ากว่าออก เพื่อให้เพย์โหลดที่ซ่อมแซมล่าสุดยังคงพร้อมใช้งาน
ตรวจสอบและซ่อมแซม
CONFIG="$(openclaw config file)"ls -lt "$CONFIG".clobbered.* "$CONFIG".rejected.* 2>/dev/null | headdiff -u "$CONFIG" "$(ls -t "$CONFIG".clobbered.* 2>/dev/null | head -n 1)"openclaw config validateopenclaw doctorลักษณะที่พบบ่อย
.clobbered.*มีอยู่ → doctor เก็บการแก้ไขจากภายนอกที่เสียหายไว้ขณะซ่อมแซมการกำหนดค่าที่ใช้งานอยู่.rejected.*มีอยู่ → การเขียนการกำหนดค่าที่ OpenClaw เป็นเจ้าของไม่ผ่านการตรวจสอบสคีมาหรือการเขียนทับก่อน commitConfig write rejected:→ การเขียนพยายามตัดโครงสร้างที่จำเป็นออก ลดขนาดไฟล์ลงอย่างมาก หรือบันทึกการกำหนดค่าที่ไม่ถูกต้องconfig reload skipped (invalid config):→ การแก้ไขโดยตรงไม่ผ่านการตรวจสอบความถูกต้องและ Gateway ที่กำลังทำงานอยู่เพิกเฉยต่อการแก้ไขนั้นInvalid config at ...→ การเริ่มทำงานล้มเหลวก่อนบริการของ Gateway จะเริ่มขึ้นmissing-meta-vs-last-good,gateway-mode-missing-vs-last-goodหรือsize-drop-vs-last-good:*→ การเขียนที่ OpenClaw เป็นเจ้าของถูกปฏิเสธ เนื่องจากมีฟิลด์หรือขนาดลดลงเมื่อเทียบกับข้อมูลสำรองล่าสุดที่ทราบว่าใช้ได้Config last-known-good promotion skipped→ ข้อมูลที่เสนอมีตัวยึดตำแหน่งข้อมูลลับที่ปกปิดแล้ว เช่น***
ตัวเลือกการแก้ไข
- เรียกใช้
openclaw doctor --fixเพื่อให้ doctor ซ่อมแซมการกำหนดค่าที่มีคำนำหน้าหรือถูกเขียนทับ หรือกู้คืนข้อมูลล่าสุดที่ทราบว่าใช้ได้ - คัดลอกเฉพาะคีย์ที่ต้องการจาก
.clobbered.*หรือ.rejected.*แล้วนำไปใช้ด้วยopenclaw config setหรือconfig.patch - เรียกใช้
openclaw config validateก่อนเริ่มการทำงานใหม่ - หากแก้ไขด้วยตนเอง ให้คงการกำหนดค่า JSON5 ไว้ทั้งหมด ไม่ใช่เฉพาะออบเจ็กต์บางส่วนที่ต้องการเปลี่ยน
ที่เกี่ยวข้อง:
คำเตือนจากการตรวจสอบ Gateway
ใช้เมื่อ openclaw gateway probe เข้าถึงบางสิ่งได้ แต่ยังคงแสดงบล็อกคำเตือน
openclaw gateway probeopenclaw gateway probe --jsonopenclaw gateway probe --ssh user@gateway-hostตรวจหา:
warnings[].codeและprimaryTargetIdในเอาต์พุต JSON- คำเตือนเกี่ยวกับการใช้ SSH สำรอง, Gateway หลายตัว, ขอบเขตสิทธิ์ที่ขาดหายไป หรือการอ้างอิงการยืนยันตัวตนที่ยังแก้ไขไม่ได้หรือไม่
ลักษณะที่พบบ่อย:
SSH tunnel failed to start; falling back to direct probes.→ การตั้งค่า SSH ล้มเหลว แต่คำสั่งยังคงลองใช้เป้าหมายที่กำหนดค่าโดยตรงหรือเป้าหมายแบบ loopbackmultiple reachable gateway identities detected→ Gateway ที่แตกต่างกันตอบกลับ หรือ OpenClaw ไม่สามารถยืนยันได้ว่าเป้าหมายที่เข้าถึงได้นั้นเป็น Gateway เดียวกัน อุโมงค์ SSH, URL พร็อกซี หรือ URL ระยะไกลที่กำหนดค่าไว้ซึ่งชี้ไปยัง Gateway เดียวกัน จะถือว่าเป็น Gateway หนึ่งตัวที่มีการรับส่งข้อมูลหลายแบบ แม้ว่าพอร์ตการรับส่งข้อมูลจะแตกต่างกันRead-probe diagnostics are limited by gateway scopes (missing operator.read)→ เชื่อมต่อสำเร็จ แต่ RPC รายละเอียดถูกจำกัดด้วยขอบเขตสิทธิ์ ให้จับคู่อัตลักษณ์อุปกรณ์หรือใช้ข้อมูลประจำตัวที่มีoperator.readGateway accepted the WebSocket connection, but follow-up read diagnostics failed→ เชื่อมต่อสำเร็จ แต่ชุด RPC วินิจฉัยแบบเต็มหมดเวลาหรือล้มเหลว ให้ถือว่านี่คือ Gateway ที่เข้าถึงได้แต่ความสามารถในการวินิจฉัยลดลง โดยเปรียบเทียบconnect.okและconnect.rpcOkในเอาต์พุต--jsonCapability: pairing-pendingหรือgateway closed (1008): pairing required→ Gateway ตอบกลับแล้ว แต่ไคลเอนต์นี้ยังต้องจับคู่หรือได้รับอนุมัติก่อนจึงจะเข้าถึงในฐานะผู้ดำเนินการได้ตามปกติ- ข้อความเตือน SecretRef ของ
gateway.auth.*/gateway.remote.*ที่ยังแก้ไขไม่ได้ → ข้อมูลการยืนยันตัวตนไม่พร้อมใช้งานในเส้นทางคำสั่งนี้สำหรับเป้าหมายที่ล้มเหลว
ที่เกี่ยวข้อง:
ช่องทางเชื่อมต่อแล้ว แต่ข้อความไม่ไหลผ่าน
หากสถานะช่องทางเชื่อมต่อแล้วแต่ข้อความไม่ไหลผ่าน ให้มุ่งตรวจสอบนโยบาย สิทธิ์ และกฎการส่งเฉพาะของช่องทาง
openclaw channels status --probeopenclaw pairing list --channel <channel> [--account <id>]openclaw status --deepopenclaw logs --followopenclaw config get channelsตรวจหา:
- นโยบาย DM (
pairing,allowlist,open,disabled) - รายการอนุญาตของกลุ่มและข้อกำหนดในการกล่าวถึง
- สิทธิ์หรือขอบเขตสิทธิ์ของ API ช่องทางที่ขาดหายไป
ลักษณะที่พบบ่อย:
mention required→ ข้อความถูกเพิกเฉยตามนโยบายการกล่าวถึงในกลุ่มpairing/ ร่องรอยการรออนุมัติ → ผู้ส่งยังไม่ได้รับอนุมัติmissing_scope,not_in_channel,Forbidden,401/403→ ปัญหาเกี่ยวกับการยืนยันตัวตนหรือสิทธิ์ของช่องทาง
ที่เกี่ยวข้อง:
การส่ง Cron และ Heartbeat
หาก Cron หรือ Heartbeat ไม่ทำงานหรือไม่ส่งข้อมูล ให้ตรวจสอบสถานะตัวกำหนดเวลาก่อน แล้วจึงตรวจสอบเป้าหมายการส่ง
openclaw cron statusopenclaw cron listopenclaw cron runs --id <jobId> --limit 20openclaw system heartbeat lastopenclaw logs --followตรวจหา:
- Cron เปิดใช้งานอยู่และมีเวลาปลุกครั้งถัดไป
- สถานะประวัติการเรียกใช้งานงาน (
ok,skipped,error) - สาเหตุที่ข้าม Heartbeat (
quiet-hours,requests-in-flight,cron-in-progress,lanes-busy,alerts-disabled,empty-heartbeat-file,no-tasks-due)
ลักษณะที่พบบ่อย
cron: scheduler disabled; jobs will not run automatically→ Cron ถูกปิดใช้งานcron: timer tick failed→ รอบการทำงานของตัวกำหนดเวลาล้มเหลว ให้ตรวจสอบข้อผิดพลาดของไฟล์ บันทึก หรือรันไทม์heartbeat skippedพร้อมreason=quiet-hours→ อยู่นอกช่วงเวลาทำงานheartbeat skippedพร้อมreason=empty-heartbeat-file→ มีHEARTBEAT.mdอยู่ แต่มีเพียงโครงร่างว่าง ความคิดเห็น ส่วนหัว รั้วโค้ด หรือรายการตรวจสอบว่าง ดังนั้น OpenClaw จึงข้ามการเรียกโมเดลheartbeat skippedพร้อมreason=no-tasks-due→HEARTBEAT.mdมีบล็อกtasks:แต่ไม่มีงานใดถึงกำหนดในรอบนี้heartbeat: unknown accountId→ รหัสบัญชีไม่ถูกต้องสำหรับเป้าหมายการส่ง Heartbeatheartbeat skippedพร้อมreason=dm-blocked→ เป้าหมาย Heartbeat ถูกแปลงเป็นปลายทางแบบ DM ขณะที่ตั้งค่าagents.defaults.heartbeat.directPolicy(หรือค่าที่แทนที่สำหรับแต่ละเอเจนต์) เป็นblock
ที่เกี่ยวข้อง:
จับคู่ Node แล้ว แต่เครื่องมือล้มเหลว
หากจับคู่ Node แล้วแต่เครื่องมือล้มเหลว ให้แยกตรวจสอบสถานะเบื้องหน้า สิทธิ์ และการอนุมัติ
openclaw nodes statusopenclaw nodes describe --node <idOrNameOrIp>openclaw approvals get --node <idOrNameOrIp>openclaw logs --followopenclaw statusตรวจหา:
- Node ออนไลน์และมีความสามารถตามที่คาดไว้
- การอนุญาตสิทธิ์จากระบบปฏิบัติการสำหรับกล้อง ไมโครโฟน ตำแหน่ง และหน้าจอ
- สถานะการอนุมัติการดำเนินการและรายการอนุญาต
ลักษณะที่พบบ่อย:
NODE_BACKGROUND_UNAVAILABLE→ แอป Node ต้องอยู่เบื้องหน้า*_PERMISSION_REQUIRED/LOCATION_PERMISSION_REQUIRED→ ขาดสิทธิ์จากระบบปฏิบัติการSYSTEM_RUN_DENIED: approval required→ การอนุมัติการดำเนินการอยู่ระหว่างรอดำเนินการSYSTEM_RUN_DENIED: allowlist miss→ คำสั่งถูกบล็อกโดยรายการอนุญาต
ที่เกี่ยวข้อง:
เครื่องมือเบราว์เซอร์ล้มเหลว
ใช้เมื่อการทำงานของเครื่องมือเบราว์เซอร์ล้มเหลว แม้ว่า Gateway จะทำงานเป็นปกติ
openclaw browser statusopenclaw browser start --browser-profile openclawopenclaw browser profilesopenclaw logs --followopenclaw doctorตรวจหา:
- มีการตั้งค่า
plugins.allowและมีbrowserอยู่หรือไม่ - พาธของไฟล์ปฏิบัติการเบราว์เซอร์ที่ถูกต้อง
- ความสามารถในการเข้าถึงโปรไฟล์ CDP
- ความพร้อมใช้งานของ Chrome ภายในเครื่องสำหรับโปรไฟล์
existing-session/user
ลักษณะของ Plugin / ไฟล์ปฏิบัติการ
unknown command "browser"หรือunknown command 'browser'→ Plugin เบราว์เซอร์แบบรวมถูกยกเว้นโดยplugins.allow- เครื่องมือเบราว์เซอร์ขาดหายไปหรือไม่พร้อมใช้งานขณะที่
browser.enabled=true→plugins.allowยกเว้นbrowserทำให้ Plugin ไม่เคยโหลด Failed to start Chrome CDP on port→ กระบวนการเบราว์เซอร์เริ่มทำงานไม่สำเร็จbrowser.executablePath not found→ พาธที่กำหนดค่าไว้ไม่ถูกต้องbrowser.cdpUrl must be http(s) or ws(s)→ URL ของ CDP ที่กำหนดค่าไว้ใช้สคีมาที่ไม่รองรับ เช่นfile:หรือftp:browser.cdpUrl has invalid port→ URL ของ CDP ที่กำหนดค่าไว้มีพอร์ตไม่ถูกต้องหรืออยู่นอกช่วงPlaywright is not available in this gateway build; '<feature>' is unsupported.→ การติดตั้ง Gateway ปัจจุบันไม่มีการขึ้นต่อกันของรันไทม์เบราว์เซอร์หลัก ให้ติดตั้งใหม่หรืออัปเดต OpenClaw แล้วเริ่ม Gateway ใหม่ สแนปช็อต ARIA และภาพหน้าจอพื้นฐานของหน้ายังคงทำงานได้ แต่การนำทาง สแนปช็อต AI ภาพหน้าจอองค์ประกอบด้วยตัวเลือก CSS และการส่งออก PDF จะยังไม่พร้อมใช้งาน
ลักษณะของ Chrome MCP / เซสชันที่มีอยู่
Could not find DevToolsActivePort for chrome→ เซสชันที่มีอยู่ของ Chrome MCP ยังไม่สามารถเชื่อมต่อกับไดเรกทอรีข้อมูลเบราว์เซอร์ที่เลือกได้ เปิดหน้าตรวจสอบของเบราว์เซอร์ เปิดใช้การดีบักระยะไกล เปิดเบราว์เซอร์ค้างไว้ อนุมัติข้อความแจ้งการเชื่อมต่อครั้งแรก แล้วลองอีกครั้ง หากไม่จำเป็นต้องใช้สถานะที่ลงชื่อเข้าใช้ ให้เลือกใช้โปรไฟล์openclawที่มีการจัดการNo browser tabs found for profile="user"→ โปรไฟล์การเชื่อมต่อ Chrome MCP ไม่มีแท็บ Chrome ภายในเครื่องที่เปิดอยู่Remote CDP for profile "<name>" is not reachable→ ไม่สามารถเข้าถึงปลายทาง CDP ระยะไกลที่กำหนดค่าไว้จากโฮสต์ GatewayBrowser attachOnly is enabled ... not reachableหรือBrowser attachOnly is enabled and CDP websocket ... is not reachable→ โปรไฟล์แบบเชื่อมต่อเท่านั้นไม่มีเป้าหมายที่เข้าถึงได้ หรือปลายทาง HTTP ตอบกลับแล้วแต่ยังไม่สามารถเปิด WebSocket ของ CDP ได้
ลักษณะขององค์ประกอบ / ภาพหน้าจอ / การอัปโหลด
fullPage is not supported for element screenshots→ คำขอภาพหน้าจอใช้--full-pageร่วมกับ--refหรือ--elementelement screenshots are not supported for existing-session profiles; use ref from snapshot.→ การเรียกภาพหน้าจอของ Chrome MCP /existing-sessionต้องใช้การจับภาพหน้าเว็บหรือ--refของสแนปช็อต ไม่ใช่--elementแบบ CSSexisting-session file uploads do not support element selectors; use ref/inputRef.→ ฮุกการอัปโหลดของ Chrome MCP ต้องใช้การอ้างอิงสแนปช็อต ไม่ใช่ตัวเลือก CSSexisting-session file uploads currently support one file at a time.→ ส่งการอัปโหลดหนึ่งรายการต่อการเรียกหนึ่งครั้งในโปรไฟล์ Chrome MCPexisting-session dialog handling does not support timeoutMs.→ ฮุกกล่องโต้ตอบในโปรไฟล์ Chrome MCP ไม่รองรับการแทนที่ค่าหมดเวลาexisting-session type does not support timeoutMs overrides.→ ละเว้นtimeoutMsสำหรับact:typeในโปรไฟล์เซสชันที่มีอยู่ของprofile="user"/ Chrome MCP หรือใช้โปรไฟล์เบราว์เซอร์แบบมีการจัดการ/CDP เมื่อต้องการค่าหมดเวลาแบบกำหนดเองresponse body is not supported for existing-session profiles yet.→responsebodyยังคงต้องใช้เบราว์เซอร์แบบมีการจัดการหรือโปรไฟล์ CDP แบบดิบ- การแทนที่วิวพอร์ต / โหมดมืด / ภาษาและภูมิภาค / ออฟไลน์ที่ค้างอยู่ในโปรไฟล์แบบเชื่อมต่อเท่านั้นหรือ CDP ระยะไกล → เรียกใช้
openclaw browser stop --browser-profile <name>เพื่อปิดเซสชันควบคุมที่ใช้งานอยู่และปล่อยสถานะการจำลอง Playwright/CDP โดยไม่ต้องเริ่ม Gateway ใหม่ทั้งหมด
ที่เกี่ยวข้อง:
หากอัปเกรดแล้วมีบางอย่างเสียหายกะทันหัน
ความเสียหายหลังการอัปเกรดส่วนใหญ่เกิดจากการกำหนดค่าคลาดเคลื่อนหรือการเริ่มบังคับใช้ค่าเริ่มต้นที่เข้มงวดยิ่งขึ้นในขณะนี้
1. ลักษณะการทำงานของการยืนยันตัวตนและการแทนที่ URL เปลี่ยนแปลงแล้ว
openclaw gateway statusopenclaw config get gateway.modeopenclaw config get gateway.remote.urlopenclaw config get gateway.auth.modeสิ่งที่ต้องตรวจสอบ:
- หาก
gateway.mode=remoteการเรียกใช้ CLI อาจกำหนดเป้าหมายไปยังระบบระยะไกล ขณะที่บริการภายในเครื่องยังทำงานปกติ - การเรียกใช้
--urlอย่างชัดเจนจะไม่ย้อนกลับไปใช้ข้อมูลประจำตัวที่จัดเก็บไว้
อาการที่พบบ่อย:
gateway connect failed:→ กำหนด URL เป้าหมายไม่ถูกต้องunauthorized→ เข้าถึงปลายทางได้ แต่การยืนยันตัวตนไม่ถูกต้อง
2. มาตรการป้องกันสำหรับการผูกและการยืนยันตัวตนเข้มงวดขึ้น
openclaw config get gateway.bindopenclaw config get gateway.auth.modeopenclaw config get gateway.auth.tokenopenclaw gateway statusopenclaw logs --followสิ่งที่ต้องตรวจสอบ:
- การผูกกับที่อยู่ที่ไม่ใช่ลูปแบ็ก (
lan,tailnet,custom) ต้องมีเส้นทางการยืนยันตัวตนของ Gateway ที่ถูกต้อง ได้แก่ การยืนยันตัวตนด้วยโทเค็น/รหัสผ่านที่ใช้ร่วมกัน หรือการปรับใช้trusted-proxyที่ไม่ใช่ลูปแบ็กซึ่งกำหนดค่าไว้อย่างถูกต้อง - คีย์เดิม เช่น
gateway.tokenไม่สามารถใช้แทนgateway.auth.tokenได้
อาการที่พบบ่อย:
refusing to bind gateway ... without auth→ ผูกกับที่อยู่ที่ไม่ใช่ลูปแบ็กโดยไม่มีเส้นทางการยืนยันตัวตนของ Gateway ที่ถูกต้องConnectivity probe: failedขณะที่รันไทม์กำลังทำงาน → Gateway ทำงานอยู่ แต่ไม่สามารถเข้าถึงได้ด้วยการยืนยันตัวตน/URL ปัจจุบัน
3. สถานะการจับคู่และข้อมูลประจำตัวของอุปกรณ์เปลี่ยนแปลงแล้ว
openclaw devices listopenclaw pairing list --channel <channel> [--account <id>]openclaw logs --followopenclaw doctorสิ่งที่ต้องตรวจสอบ:
- การอนุมัติอุปกรณ์สำหรับแดชบอร์ด/โหนดที่รอดำเนินการ
- การอนุมัติการจับคู่ DM ที่รอดำเนินการหลังจากมีการเปลี่ยนแปลงนโยบายหรือข้อมูลประจำตัว
อาการที่พบบ่อย:
device identity required→ ไม่ผ่านข้อกำหนดการยืนยันตัวตนของอุปกรณ์pairing required→ ต้องอนุมัติผู้ส่ง/อุปกรณ์
หากการกำหนดค่าบริการและรันไทม์ยังไม่ตรงกันหลังจากตรวจสอบแล้ว ให้ติดตั้งเมทาดาทาของบริการอีกครั้งจากไดเรกทอรีโปรไฟล์/สถานะเดียวกัน:
openclaw gateway install --forceopenclaw gateway restartเนื้อหาที่เกี่ยวข้อง: