CLI commands
Gateway
Gateway คือเซิร์ฟเวอร์ WebSocket ของ OpenClaw (ช่องทาง, Node, เซสชัน, hook) คำสั่งย่อยในหน้านี้อยู่ภายใต้ openclaw gateway …
การตั้งค่า mDNS ภายในเครื่อง + DNS-SD แบบ wide-area
วิธีที่ OpenClaw ประกาศและค้นหา Gateway
คีย์การกำหนดค่า Gateway ระดับบนสุด
เรียกใช้ Gateway
เรียกใช้กระบวนการ Gateway ภายในเครื่อง:
openclaw gatewayนามแฝงสำหรับโหมด foreground:
openclaw gateway runลักษณะการทำงานเมื่อเริ่มต้น
- โดยค่าเริ่มต้น Gateway จะปฏิเสธการเริ่มทำงาน เว้นแต่จะตั้งค่า
gateway.mode=localไว้ใน~/.openclaw/openclaw.jsonใช้--allow-unconfiguredสำหรับการรันเฉพาะกิจ/การพัฒนา openclaw onboard --mode localและopenclaw setupควรเขียนค่าgateway.mode=localหากไฟล์มีอยู่แต่ไม่มีgateway.modeให้ถือว่าเป็นการกำหนดค่าที่เสียหรือถูกเขียนทับ และซ่อมแซมแทนการถือว่าเป็นโหมด local โดยนัย- หากไฟล์มีอยู่และไม่มี
gateway.modeGateway จะถือว่าเป็นความเสียหายของการกำหนดค่าที่น่าสงสัย และปฏิเสธที่จะ "เดา local" ให้คุณ - การ bind ออกนอก loopback โดยไม่มี auth จะถูกบล็อก (มาตรการป้องกันความปลอดภัย)
SIGUSR1จะทริกเกอร์การรีสตาร์ทภายในกระบวนการเมื่อได้รับอนุญาต (commands.restartเปิดใช้งานตามค่าเริ่มต้น; ตั้งค่าcommands.restart: falseเพื่อบล็อกการรีสตาร์ทด้วยตนเอง ขณะที่การ apply/update เครื่องมือ/การกำหนดค่า Gateway ยังอนุญาตอยู่)- handler ของ
SIGINT/SIGTERMจะหยุดกระบวนการ Gateway แต่จะไม่กู้คืนสถานะเทอร์มินัลแบบกำหนดเองใด ๆ หากคุณครอบ CLI ด้วย TUI หรืออินพุต raw-mode ให้กู้คืนเทอร์มินัลก่อนออก
ตัวเลือก
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tcG9ydCA8cG9ydA
" type="number">
พอร์ต WebSocket (ค่าเริ่มต้นมาจาก config/env; โดยทั่วไปคือ 18789)
"--bind"--authOPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tdG9rZW4gPHRva2Vu
" type="string">
override token (ตั้งค่า OPENCLAW_GATEWAY_TOKEN ให้กระบวนการด้วย)
"--password"--tailscale--tailscale-reset-on-exitbooleanรีเซ็ตการกำหนดค่า serve/funnel ของ Tailscale เมื่อปิดการทำงาน
--allow-unconfiguredbooleanอนุญาตให้เริ่ม Gateway โดยไม่มี gateway.mode=local ในการกำหนดค่า ข้าม guard ตอนเริ่มต้นสำหรับการ bootstrap เฉพาะกิจ/การพัฒนาเท่านั้น; ไม่เขียนหรือซ่อมแซมไฟล์การกำหนดค่า
--devbooleanสร้างการกำหนดค่า + workspace สำหรับการพัฒนาหากไม่มีอยู่ (ข้าม BOOTSTRAP.md)
--resetbooleanรีเซ็ตการกำหนดค่าสำหรับการพัฒนา + credentials + เซสชัน + workspace (ต้องใช้ --dev)
--forcebooleankill listener ที่มีอยู่บนพอร์ตที่เลือกก่อนเริ่มต้น
--verbosebooleanlog แบบละเอียด
--cli-backend-logsbooleanแสดงเฉพาะ log ของแบ็กเอนด์ CLI ในคอนโซล (และเปิดใช้ stdout/stderr)
"--ws-log--compactbooleanนามแฝงสำหรับ --ws-log compact
--raw-streambooleanบันทึกเหตุการณ์สตรีมโมเดลดิบเป็น jsonl
รีสตาร์ท Gateway
openclaw gateway restartopenclaw gateway restart --safeopenclaw gateway restart --safe --skip-deferralopenclaw gateway restart --forceopenclaw gateway restart --safe ขอให้ Gateway ที่กำลังทำงาน preflight งาน OpenClaw ที่ active ก่อนรีสตาร์ท หากมีการดำเนินการในคิว, การส่งคำตอบ, การรันแบบฝัง, หรือการรัน task ที่ active อยู่ Gateway จะรายงานตัวบล็อก, รวมคำขอรีสตาร์ทแบบ safe ที่ซ้ำกัน, และรีสตาร์ทเมื่อ active work ระบายหมดแล้ว restart แบบธรรมดายังคงลักษณะการทำงานของ service-manager เดิมเพื่อความเข้ากันได้ ใช้ --force เฉพาะเมื่อคุณต้องการเส้นทาง override ทันทีอย่างชัดเจน
openclaw gateway restart --safe --skip-deferral รันการรีสตาร์ทแบบประสานงานที่รับรู้ OpenClaw เหมือนกับ --safe แต่ข้าม gate การเลื่อนเพราะ active-work เพื่อให้ Gateway ส่งการรีสตาร์ททันทีแม้ว่าจะมีการรายงานตัวบล็อก ใช้เป็นทางออกฉุกเฉินสำหรับผู้ปฏิบัติการเมื่อการเลื่อนถูกตรึงไว้โดยการรัน task ที่ค้าง และ --safe เพียงอย่างเดียวจะรอไม่มีกำหนด --skip-deferral ต้องใช้ --safe
การทำโปรไฟล์เมื่อเริ่มต้น
- ตั้งค่า
OPENCLAW_GATEWAY_STARTUP_TRACE=1เพื่อบันทึกเวลาของ phase ระหว่างการเริ่มต้น Gateway รวมถึง delay ของeventLoopMaxต่อ phase และเวลาของตารางค้นหา Plugin สำหรับ installed-index, manifest registry, startup planning, และงาน owner-map - ตั้งค่า
OPENCLAW_DIAGNOSTICS=timelineพร้อมOPENCLAW_DIAGNOSTICS_TIMELINE_PATH=<path>เพื่อเขียน timeline diagnostics ตอนเริ่มต้นแบบ JSONL best-effort สำหรับ harness QA ภายนอก คุณยังสามารถเปิดใช้ flag ด้วยdiagnostics.flags: ["timeline"]ในการกำหนดค่า; path ยังคงมาจาก env เพิ่มOPENCLAW_DIAGNOSTICS_EVENT_LOOP=1เพื่อรวมตัวอย่าง event-loop - รัน
pnpm test:startup:gateway -- --runs 5 --warmup 1เพื่อ benchmark การเริ่มต้น Gateway benchmark จะบันทึกเอาต์พุตแรกของกระบวนการ,/healthz,/readyz, เวลาของ startup trace, delay ของ event-loop, และรายละเอียดเวลาในตารางค้นหา Plugin
สอบถาม Gateway ที่กำลังทำงาน
คำสั่ง query ทั้งหมดใช้ WebSocket RPC
โหมดเอาต์พุต
- ค่าเริ่มต้น: อ่านได้สำหรับมนุษย์ (มีสีใน TTY)
--json: JSON ที่เครื่องอ่านได้ (ไม่มี styling/spinner)--no-color(หรือNO_COLOR=1): ปิด ANSI ขณะที่ยังคง layout สำหรับมนุษย์ไว้
ตัวเลือกที่ใช้ร่วมกัน
--url <url>: URL WebSocket ของ Gateway--token <token>: token ของ Gateway--password <password>: รหัสผ่าน Gateway--timeout <ms>: timeout/budget (แตกต่างกันไปตามคำสั่ง)--expect-final: รอการตอบกลับแบบ "final" (การเรียก agent)
gateway health
openclaw gateway health --url ws://127.0.0.1:18789endpoint HTTP /healthz เป็น liveness probe: จะตอบกลับเมื่อเซิร์ฟเวอร์สามารถตอบ HTTP ได้ endpoint HTTP /readyz เข้มงวดกว่าและจะยังคงเป็นสีแดงขณะที่ sidecar ของ Plugin ตอนเริ่มต้น, ช่องทาง, หรือ hook ที่กำหนดค่าไว้ยังคงกำลัง settle การตอบกลับ readiness แบบละเอียดภายในเครื่องหรือที่ authenticated แล้วจะรวมบล็อก diagnostics eventLoop ซึ่งมี delay ของ event-loop, การใช้ประโยชน์ event-loop, อัตราส่วนคอร์ CPU, และ flag degraded
gateway usage-cost
ดึงสรุป usage-cost จาก log ของเซสชัน
openclaw gateway usage-costopenclaw gateway usage-cost --days 7openclaw gateway usage-cost --json"--daysgateway stability
ดึง diagnostic stability recorder ล่าสุดจาก Gateway ที่กำลังทำงาน
openclaw gateway stabilityopenclaw gateway stability --type payload.largeopenclaw gateway stability --bundle latestopenclaw gateway stability --bundle latest --exportopenclaw gateway stability --jsonOPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tbGltaXQgPGxpbWl0
" type="number" default="25">
จำนวนเหตุการณ์ล่าสุดสูงสุดที่จะรวม (สูงสุด 1000)
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tdHlwZSA8dHlwZQ
" type="string">
กรองตามประเภทเหตุการณ์ diagnostics เช่น payload.large หรือ diagnostic.memory.pressure
"--since-seq--bundle [path]stringอ่าน stability bundle ที่บันทึกไว้แทนการเรียก Gateway ที่กำลังทำงาน ใช้ --bundle latest (หรือแค่ --bundle) สำหรับ bundle ใหม่ที่สุดภายใต้ไดเรกทอรี state หรือส่ง path JSON ของ bundle โดยตรง
--exportbooleanเขียน zip diagnostics สำหรับ support ที่แชร์ได้ แทนการพิมพ์รายละเอียด stability
OPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tb3V0cHV0IDxwYXRo
" type="string">
path เอาต์พุตสำหรับ --export
ความเป็นส่วนตัวและลักษณะการทำงานของ bundle
- records เก็บ metadata ด้านปฏิบัติการ: ชื่อเหตุการณ์, จำนวน, ขนาด byte, ค่าหน่วยความจำ, สถานะคิว/เซสชัน, ชื่อช่องทาง/Plugin, และสรุปเซสชันที่ redact แล้ว โดยไม่เก็บข้อความแชท, body ของ Webhook, เอาต์พุตของเครื่องมือ, body คำขอหรือคำตอบดิบ, token, cookie, ค่าลับ, hostname, หรือ session id ดิบ ตั้งค่า
diagnostics.enabled: falseเพื่อปิด recorder ทั้งหมด - เมื่อ Gateway ออกแบบ fatal, shutdown timeout, และ restart startup failure, OpenClaw จะเขียน snapshot diagnostics เดียวกันไปที่
~/.openclaw/logs/stability/openclaw-stability-*.jsonเมื่อ recorder มีเหตุการณ์ ตรวจสอบ bundle ใหม่ที่สุดด้วยopenclaw gateway stability --bundle latest;--limit,--type, และ--since-seqใช้กับเอาต์พุต bundle ด้วย
gateway diagnostics export
เขียน zip diagnostics ภายในเครื่องที่ออกแบบมาเพื่อแนบกับรายงาน bug สำหรับโมเดลความเป็นส่วนตัวและเนื้อหา bundle ดู การส่งออก diagnostics
openclaw gateway diagnostics exportopenclaw gateway diagnostics export --output openclaw-diagnostics.zipopenclaw gateway diagnostics export --json"--log-lines"--log-bytes"--url"--token"--password"--timeout--no-stability-bundlebooleanข้ามการค้นหา stability bundle ที่บันทึกไว้
--jsonbooleanพิมพ์ path ที่เขียน, ขนาด, และ manifest เป็น JSON
export มี manifest, สรุป Markdown, รูปแบบการกำหนดค่า, รายละเอียดการกำหนดค่าที่ sanitize แล้ว, สรุป log ที่ sanitize แล้ว, snapshot status/health ของ Gateway ที่ sanitize แล้ว, และ stability bundle ใหม่ที่สุดเมื่อมีอยู่
สิ่งนี้มีไว้สำหรับแชร์ โดยเก็บรายละเอียดด้านปฏิบัติการที่ช่วย debug เช่น field ของ log OpenClaw ที่ปลอดภัย, ชื่อ subsystem, status code, duration, โหมดที่กำหนดค่าไว้, พอร์ต, รหัส Plugin, รหัส provider, การตั้งค่า feature ที่ไม่ใช่ความลับ, และข้อความ log ด้านปฏิบัติการที่ redact แล้ว โดยละเว้นหรือ redact ข้อความแชท, body ของ Webhook, เอาต์พุตของเครื่องมือ, credentials, cookie, ตัวระบุบัญชี/ข้อความ, ข้อความ prompt/instruction, hostname, และค่าลับ เมื่อข้อความรูปแบบ LogTape ดูเหมือนข้อความ payload ของผู้ใช้/แชท/เครื่องมือ export จะเก็บเฉพาะว่ามีข้อความถูกละเว้น พร้อมจำนวน byte ของข้อความนั้น
gateway status
gateway status แสดงบริการ Gateway (launchd/systemd/schtasks) พร้อม probe ทางเลือกสำหรับความสามารถ connectivity/auth
openclaw gateway statusopenclaw gateway status --jsonopenclaw gateway status --require-rpc"--url"--token"--password"--timeout--no-probebooleanข้าม connectivity probe (มุมมองเฉพาะ service)
--deepbooleanสแกน service ระดับระบบด้วย
--require-rpcbooleanยกระดับ connectivity probe เริ่มต้นเป็น read probe และออกด้วยค่าที่ไม่ใช่ศูนย์เมื่อ read probe นั้นล้มเหลว ไม่สามารถใช้ร่วมกับ --no-probe ได้
Status semantics
gateway statusยังคงใช้ได้สำหรับการวินิจฉัย แม้เมื่อ config ของ CLI ภายในเครื่องหายไปหรือไม่ถูกต้องgateway statusค่าเริ่มต้นพิสูจน์สถานะ service, การเชื่อมต่อ WebSocket และความสามารถด้าน auth ที่เห็นได้ในช่วง handshake โดยไม่ได้พิสูจน์การดำเนินการ read/write/admin- Diagnostic probe ไม่เปลี่ยนแปลงข้อมูลสำหรับ auth ของอุปกรณ์ครั้งแรก: จะใช้ device token ที่ cache ไว้เดิมเมื่อมีอยู่ แต่จะไม่สร้างตัวตนอุปกรณ์ CLI ใหม่หรือระเบียนการจับคู่อุปกรณ์แบบ read-only ใหม่เพียงเพื่อตรวจสอบสถานะ
gateway statusจะ resolve auth SecretRefs ที่กำหนดค่าไว้สำหรับ probe auth เมื่อทำได้- หาก auth SecretRef ที่จำเป็นยัง resolve ไม่ได้ในเส้นทางคำสั่งนี้
gateway status --jsonจะรายงานrpc.authWarningเมื่อ probe connectivity/auth ล้มเหลว; ส่ง--token/--passwordอย่างชัดเจน หรือ resolve แหล่ง secret ก่อน - หาก probe สำเร็จ คำเตือน auth-ref ที่ยัง resolve ไม่ได้จะถูกซ่อนเพื่อหลีกเลี่ยง false positive
- ใช้
--require-rpcในสคริปต์และ automation เมื่อ service ที่กำลัง listen อยู่ยังไม่เพียงพอ และคุณต้องการให้การเรียก RPC แบบ read-scope มีสถานะดีด้วย --deepเพิ่มการสแกนแบบ best-effort สำหรับการติดตั้ง launchd/systemd/schtasks เพิ่มเติม เมื่อพบ service ที่คล้าย Gateway หลายรายการ เอาต์พุตสำหรับมนุษย์จะพิมพ์คำแนะนำการล้างข้อมูลและเตือนว่าการตั้งค่าส่วนใหญ่ควรรัน Gateway หนึ่งรายการต่อเครื่อง--deepยังรายงานการส่งต่อการ restart ล่าสุดของ Gateway supervisor เมื่อ process ของ service ออกอย่างสะอาดเพื่อให้ supervisor ภายนอก restart--deepรันการตรวจสอบ config ในโหมดที่รับรู้ Plugin (pluginValidation: "full") และแสดงคำเตือน manifest ของ Plugin ที่กำหนดค่าไว้ (เช่น metadata ของ channel config ที่หายไป) เพื่อให้ smoke check สำหรับการติดตั้งและอัปเดตตรวจจับได้gateway statusค่าเริ่มต้นยังคงใช้เส้นทาง read-only ที่รวดเร็วซึ่งข้ามการตรวจสอบ Plugin- เอาต์พุตสำหรับมนุษย์รวม path ของ log file ที่ resolve แล้ว พร้อม snapshot ของ path/ความถูกต้องของ config ระหว่าง CLI กับ service เพื่อช่วยวินิจฉัย profile หรือ state-dir drift
Linux systemd auth-drift checks
- บนการติดตั้ง Linux systemd การตรวจ auth drift ของ service จะอ่านค่าทั้ง
Environment=และEnvironmentFile=จาก unit (รวมถึง%h, path ที่ quote ไว้, ไฟล์หลายไฟล์ และไฟล์ optional ที่ขึ้นต้นด้วย-) - การตรวจ drift จะ resolve
gateway.auth.tokenSecretRefs โดยใช้ runtime env ที่ merge แล้ว (env ของคำสั่ง service ก่อน จากนั้น fallback เป็น process env) - หาก token auth ไม่ได้ active อย่างมีผลจริง (
gateway.auth.modeแบบชัดเจนเป็นpassword/none/trusted-proxyหรือไม่ได้ตั้ง mode โดยที่ password อาจชนะได้และไม่มี token candidate ใดชนะได้) การตรวจ token-drift จะข้ามการ resolve config token
gateway probe
gateway probe คือคำสั่ง "debug everything" โดยจะ probe เสมอ:
- Gateway remote ที่คุณกำหนดค่าไว้ (หากตั้งไว้), และ
- localhost (loopback) แม้จะกำหนด remote ไว้ก็ตาม
หากคุณส่ง --url เป้าหมายที่ระบุชัดเจนนั้นจะถูกเพิ่มไว้ก่อนทั้งสองรายการ เอาต์พุตสำหรับมนุษย์ติดป้ายเป้าหมายเป็น:
URL (ระบุชัดเจน)Remote (กำหนดค่าไว้)หรือRemote (กำหนดค่าไว้, ไม่ active)Local loopback
openclaw gateway probeopenclaw gateway probe --jsonInterpretation
Reachable: yesหมายถึงมีเป้าหมายอย่างน้อยหนึ่งรายการที่ยอมรับการเชื่อมต่อ WebSocketCapability: read-only|write-capable|admin-capable|pairing-pending|connect-onlyรายงานสิ่งที่ probe พิสูจน์ได้เกี่ยวกับ auth ซึ่งแยกจาก reachabilityRead probe: okหมายถึงการเรียก RPC รายละเอียดแบบ read-scope (health/status/system-presence/config.get) สำเร็จด้วยRead probe: limited - missing scope: operator.readหมายถึงเชื่อมต่อสำเร็จ แต่ RPC แบบ read-scope ถูกจำกัด รายงานเป็น reachability แบบ degraded ไม่ใช่ความล้มเหลวทั้งหมดRead probe: failedหลังConnect: okหมายถึง Gateway ยอมรับการเชื่อมต่อ WebSocket แล้ว แต่การวินิจฉัย read ที่ตามมาหมดเวลาหรือล้มเหลว ซึ่งเป็น reachability แบบ degraded เช่นกัน ไม่ใช่ Gateway ที่เข้าถึงไม่ได้- เช่นเดียวกับ
gateway statusprobe จะใช้ auth ของอุปกรณ์ที่ cache ไว้เดิม แต่จะไม่สร้างตัวตนอุปกรณ์หรือสถานะการจับคู่ครั้งแรก - Exit code จะไม่ใช่ศูนย์เฉพาะเมื่อไม่มีเป้าหมายที่ probe แล้วเข้าถึงได้
JSON output
ระดับบนสุด:
ok: มีเป้าหมายอย่างน้อยหนึ่งรายการที่เข้าถึงได้degraded: มีเป้าหมายอย่างน้อยหนึ่งรายการที่ยอมรับการเชื่อมต่อ แต่ไม่ได้ทำการวินิจฉัย RPC รายละเอียดอย่างครบถ้วนcapability: ความสามารถที่ดีที่สุดที่พบในเป้าหมายที่เข้าถึงได้ (read_only,write_capable,admin_capable,pairing_pending,connected_no_operator_scopeหรือunknown)primaryTargetId: เป้าหมายที่ดีที่สุดให้ถือเป็นผู้ชนะที่ active ตามลำดับนี้: URL ที่ระบุชัดเจน, SSH tunnel, remote ที่กำหนดค่าไว้, จากนั้น local loopbackwarnings[]: ระเบียนคำเตือนแบบ best-effort ที่มีcode,messageและtargetIdsแบบ optionalnetwork: hint URL ของ local loopback/tailnet ที่ได้จาก config ปัจจุบันและระบบเครือข่ายของ hostdiscovery.timeoutMsและdiscovery.count: budget/result count ของ discovery จริงที่ใช้สำหรับรอบ probe นี้
ต่อเป้าหมาย (targets[].connect):
ok: reachability หลัง connect + การจัดประเภท degradedrpcOk: RPC รายละเอียดเต็มสำเร็จscopeLimited: RPC รายละเอียดล้มเหลวเนื่องจากขาด operator scope
ต่อเป้าหมาย (targets[].auth):
role: บทบาท auth ที่รายงานในhello-okเมื่อมีscopes: scope ที่ได้รับซึ่งรายงานในhello-okเมื่อมีcapability: การจัดประเภทความสามารถ auth ที่แสดงสำหรับเป้าหมายนั้น
Common warning codes
ssh_tunnel_failed: การตั้งค่า SSH tunnel ล้มเหลว; คำสั่ง fallback ไปใช้ direct probemultiple_gateways: มีเป้าหมายมากกว่าหนึ่งรายการที่เข้าถึงได้; เป็นกรณีไม่ปกติ เว้นแต่คุณตั้งใจรัน profile ที่แยกกัน เช่น bot สำหรับกู้คืนauth_secretref_unresolved: auth SecretRef ที่กำหนดค่าไว้ไม่สามารถ resolve ได้สำหรับเป้าหมายที่ล้มเหลวprobe_scope_limited: การเชื่อมต่อ WebSocket สำเร็จ แต่ read probe ถูกจำกัดเนื่องจากขาดoperator.read
Remote ผ่าน SSH (ความเทียบเท่ากับแอป Mac)
โหมด "Remote over SSH" ของแอป macOS ใช้ local port-forward เพื่อให้ Gateway remote (ซึ่งอาจ bind กับ loopback เท่านั้น) เข้าถึงได้ที่ ws://127.0.0.1:<port>
CLI ที่เทียบเท่า:
openclaw gateway probe --ssh user@gateway-hostOPENCLAW_DOCS_MARKER:paramOpen:IHBhdGg9Ii0tc3NoIDx0YXJnZXQ
" type="string">
user@host หรือ user@host:port (port มีค่าเริ่มต้นเป็น 22)
--ssh-autobooleanเลือก host ของ Gateway รายการแรกที่ค้นพบเป็นเป้าหมาย SSH จาก endpoint ของ discovery ที่ resolve แล้ว (local. บวกกับโดเมน wide-area ที่กำหนดค่าไว้ หากมี) hint แบบ TXT-only จะถูกละเว้น
Config (optional, ใช้เป็นค่าเริ่มต้น):
gateway.remote.sshTargetgateway.remote.sshIdentity
gateway call <method>
ตัวช่วย RPC ระดับต่ำ
openclaw gateway call statusopenclaw gateway call logs.tail --params '{"sinceMs": 60000}'"--params"--url"--token"--password"--timeout--expect-finalbooleanส่วนใหญ่สำหรับ RPC แบบ agent-style ที่ stream event ขั้นกลางก่อน payload สุดท้าย
--jsonbooleanเอาต์พุต JSON ที่อ่านได้โดยเครื่อง
จัดการ service ของ Gateway
openclaw gateway installopenclaw gateway startopenclaw gateway stopopenclaw gateway restartopenclaw gateway uninstallติดตั้งด้วย wrapper
ใช้ --wrapper เมื่อ service ที่จัดการอยู่ต้องเริ่มผ่าน executable อื่น เช่น
shim ของ secrets manager หรือ helper สำหรับ run-as wrapper จะได้รับ args ปกติของ Gateway และ
รับผิดชอบในการ exec openclaw หรือ Node พร้อม args เหล่านั้นในท้ายที่สุด
cat > ~/.local/bin/openclaw-doppler <<'EOF'#!/usr/bin/env bashset -euo pipefailexec doppler run --project my-project --config production -- openclaw "$@"EOFchmod +x ~/.local/bin/openclaw-doppler openclaw gateway install --wrapper ~/.local/bin/openclaw-doppler --forceopenclaw gateway restartคุณยังสามารถตั้งค่า wrapper ผ่าน environment ได้ gateway install จะตรวจสอบว่า path เป็น
ไฟล์ executable, เขียน wrapper ลงใน service ProgramArguments และบันทึก
OPENCLAW_WRAPPER ไว้ใน environment ของ service สำหรับการ reinstall, update และการซ่อมแซมด้วย doctor แบบบังคับในภายหลัง
OPENCLAW_WRAPPER="$HOME/.local/bin/openclaw-doppler" openclaw gateway install --forceopenclaw doctorหากต้องการลบ wrapper ที่บันทึกไว้ ให้ล้าง OPENCLAW_WRAPPER ระหว่าง reinstall:
OPENCLAW_WRAPPER= openclaw gateway install --forceopenclaw gateway restartCommand options
gateway status:--url,--token,--password,--timeout,--no-probe,--require-rpc,--deep,--jsongateway install:--port,--runtime <node|bun>,--token,--wrapper <path>,--force,--jsongateway restart:--safe,--skip-deferral,--force,--wait <duration>,--jsongateway uninstall|start:--jsongateway stop:--disable,--json
พฤติกรรมวงจรชีวิต
- ใช้
gateway restartเพื่อรีสตาร์ตบริการที่จัดการอยู่ อย่าต่อคำสั่งgateway stopและgateway startเพื่อใช้แทนการรีสตาร์ต - บน macOS,
gateway stopใช้launchctl bootoutเป็นค่าเริ่มต้น ซึ่งลบ LaunchAgent ออกจากเซสชันการบูตปัจจุบันโดยไม่คงการปิดใช้งานไว้ — การกู้คืนอัตโนมัติของ KeepAlive ยังคงเปิดใช้งานสำหรับการขัดข้องในอนาคต และgateway startเปิดใช้งานใหม่ได้อย่างสะอาดโดยไม่ต้องสั่งlaunchctl enableด้วยตนเอง ส่ง--disableเพื่อระงับ KeepAlive และ RunAtLoad แบบถาวร เพื่อไม่ให้ gateway เริ่มทำงานใหม่จนกว่าจะสั่งgateway startอย่างชัดเจนครั้งถัดไป ใช้ตัวเลือกนี้เมื่อการหยุดด้วยตนเองควรคงอยู่หลังการรีบูตหรือการรีสตาร์ตระบบ gateway restart --safeขอให้ Gateway ที่กำลังทำงานอยู่ตรวจล่วงหน้างาน OpenClaw ที่ยังทำงานอยู่ และเลื่อนการรีสตาร์ตจนกว่าการส่งคำตอบ การรันแบบฝัง และการรันงานจะระบายหมด--safeใช้ร่วมกับ--forceหรือ--waitไม่ได้gateway restart --wait 30sเขียนทับงบเวลาระบายงานก่อนรีสตาร์ตที่กำหนดค่าไว้สำหรับการรีสตาร์ตครั้งนั้น ตัวเลขล้วนเป็นมิลลิวินาที ยอมรับหน่วยอย่างs,mและhได้--wait 0จะรอไม่มีกำหนดgateway restart --safe --skip-deferralรันการรีสตาร์ตอย่างปลอดภัยที่รับรู้งาน OpenClaw แต่ข้ามด่านการเลื่อนเวลา เพื่อให้ Gateway ส่งสัญญาณรีสตาร์ตทันทีแม้มีรายงานตัวบล็อกอยู่ เป็นทางออกฉุกเฉินสำหรับผู้ปฏิบัติงานเมื่อการเลื่อนเวลาจากงานที่ค้างอยู่หยุดชะงัก ต้องใช้--safegateway restart --forceข้ามการระบายงานที่ยังทำงานอยู่และรีสตาร์ตทันที ใช้เมื่่อผู้ปฏิบัติงานตรวจสอบตัวบล็อกงานที่แสดงไว้แล้วและต้องการให้ gateway กลับมาทันที- คำสั่งวงจรชีวิตรองรับ
--jsonสำหรับการเขียนสคริปต์
Auth และ SecretRefs ขณะติดตั้ง
- เมื่อ token auth ต้องใช้โทเค็นและ
gateway.auth.tokenจัดการโดย SecretRef,gateway installจะตรวจสอบว่า SecretRef แก้ค่าได้ แต่จะไม่คงโทเค็นที่แก้ค่าแล้วไว้ในข้อมูลเมตาสภาพแวดล้อมของบริการ - หาก token auth ต้องใช้โทเค็นและ SecretRef ของโทเค็นที่กำหนดค่าไว้แก้ค่าไม่ได้ การติดตั้งจะล้มเหลวแบบปิดแทนที่จะคง fallback plaintext ไว้
- สำหรับ password auth บน
gateway runควรใช้OPENCLAW_GATEWAY_PASSWORD,--password-fileหรือgateway.auth.passwordที่มี SecretRef รองรับ แทน--passwordแบบอินไลน์ - ในโหมด auth ที่อนุมานได้
OPENCLAW_GATEWAY_PASSWORDที่มีเฉพาะใน shell จะไม่ผ่อนปรนข้อกำหนดโทเค็นสำหรับการติดตั้ง ใช้การกำหนดค่าที่คงทน (gateway.auth.passwordหรือ configenv) เมื่อติดตั้งบริการที่จัดการอยู่ - หากกำหนดค่าทั้ง
gateway.auth.tokenและgateway.auth.passwordและไม่ได้ตั้งค่าgateway.auth.modeการติดตั้งจะถูกบล็อกจนกว่าจะตั้งค่าโหมดอย่างชัดเจน
ค้นหา gateway (Bonjour)
gateway discover สแกนหา beacon ของ Gateway (_openclaw-gw._tcp)
- Multicast DNS-SD:
local. - Unicast DNS-SD (Wide-Area Bonjour): เลือกโดเมนหนึ่ง (ตัวอย่าง:
openclaw.internal.) และตั้งค่า split DNS + เซิร์ฟเวอร์ DNS ดู Bonjour
เฉพาะ gateway ที่เปิดใช้งานการค้นหา Bonjour (ค่าเริ่มต้น) เท่านั้นที่จะประกาศ beacon
เรคคอร์ดการค้นหาแบบ wide-area สามารถมีคำใบ้ TXT เหล่านี้ได้:
role(คำใบ้บทบาท gateway)transport(คำใบ้ transport เช่นgateway)gatewayPort(พอร์ต WebSocket โดยปกติคือ18789)sshPort(เฉพาะโหมดการค้นหาแบบเต็มเท่านั้น; ไคลเอนต์จะใช้เป้าหมาย SSH เริ่มต้นเป็น22เมื่อไม่มีค่านี้)tailnetDns(ชื่อโฮสต์ MagicDNS เมื่อมี)gatewayTls/gatewayTlsSha256(เปิดใช้งาน TLS + ลายนิ้วมือใบรับรอง)cliPath(เฉพาะโหมดการค้นหาแบบเต็มเท่านั้น)
gateway discover
openclaw gateway discover"--timeout--jsonbooleanเอาต์พุตที่เครื่องอ่านได้ (และปิดใช้งานการจัดสไตล์/สปินเนอร์ด้วย)
ตัวอย่าง:
openclaw gateway discover --timeout 4000openclaw gateway discover --json | jq '.beacons[].wsUrl'