Gateway
การดำเนินการเบื้องหลังและเครื่องมือจัดการกระบวนการ
OpenClaw เรียกใช้คำสั่งเชลล์ผ่านเครื่องมือ exec และเก็บงานที่ทำงานเป็นเวลานานไว้ในหน่วยความจำ เครื่องมือ process ใช้จัดการเซสชันเบื้องหลังเหล่านั้น
เครื่องมือ exec
พารามิเตอร์:
| พารามิเตอร์ | คำอธิบาย |
|---|---|
command |
จำเป็น คำสั่งเชลล์ที่จะเรียกใช้ |
workdir |
ไดเรกทอรีทำงาน หากไม่ระบุจะใช้ cwd เริ่มต้น |
env |
ตัวแปรสภาพแวดล้อมเพิ่มเติมสำหรับคำสั่ง |
yieldMs |
จำนวนมิลลิวินาทีที่จะรอก่อนย้ายไปทำงานเบื้องหลัง (ค่าเริ่มต้น 10000) |
background |
เรียกใช้ในเบื้องหลังทันที |
timeout |
ระยะหมดเวลาเป็นวินาที (ค่าเริ่มต้นคือ tools.exec.timeoutSec) และจะยุติโปรเซสเมื่อหมดเวลา ตั้งค่า timeout: 0 เพื่อปิดระยะหมดเวลาของโปรเซส exec สำหรับการเรียกครั้งนั้น |
pty |
เรียกใช้ในเทอร์มินัลจำลองเมื่อพร้อมใช้งาน (CLI ที่ต้องใช้ TTY, เอเจนต์เขียนโค้ด) |
elevated |
เรียกใช้นอกแซนด์บ็อกซ์ หากเปิดใช้งาน/อนุญาตโหมดยกระดับ (gateway โดยค่าเริ่มต้น หรือ node เมื่อเป้าหมาย exec คือ node) |
host |
เป้าหมาย exec: auto, sandbox, gateway หรือ node |
node |
รหัส/ชื่อ Node ใช้ร่วมกับ host: "node" |
ลักษณะการทำงาน:
- การทำงานเบื้องหน้าจะส่งคืนเอาต์พุตโดยตรง
- เมื่อย้ายไปทำงานเบื้องหลัง (โดยระบุชัดเจนหรือเนื่องจากหมดเวลา
yieldMs) เครื่องมือจะส่งคืนstatus: "running"+sessionIdและส่วนท้ายสั้น ๆ ของเอาต์พุต - การทำงานเบื้องหลังและการทำงานที่ใช้
yieldMsจะสืบทอดtools.exec.timeoutSecเว้นแต่การเรียกจะระบุtimeoutไว้อย่างชัดเจน - เอาต์พุตจะคงอยู่ในหน่วยความจำจนกว่าจะมีการสำรวจหรือล้างเซสชัน
- หากไม่อนุญาตให้ใช้เครื่องมือ
processการทำงานของexecจะเป็นแบบซิงโครนัสและไม่สนใจyieldMs/background - คำสั่ง exec ที่สร้างขึ้นจะได้รับ
OPENCLAW_SHELL=execเพื่อใช้กับกฎเชลล์/โปรไฟล์ที่รับรู้บริบท - สำหรับงานที่ใช้เวลานานและเริ่มตอนนี้: ให้เริ่มเพียงครั้งเดียว แล้วใช้การปลุกอัตโนมัติเมื่อเสร็จสิ้น (หากเปิดใช้งาน) เมื่อคำสั่งสร้างเอาต์พุตหรือล้มเหลว
- หากการปลุกอัตโนมัติเมื่อเสร็จสิ้นไม่พร้อมใช้งาน หรือคุณต้องการยืนยันความสำเร็จแบบไม่มีเอาต์พุตสำหรับคำสั่งที่จบอย่างเรียบร้อยโดยไม่สร้างเอาต์พุต ให้สำรวจด้วย
process - อย่าจำลองการแจ้งเตือนหรือการติดตามผลแบบหน่วงเวลาด้วยลูป
sleepหรือการสำรวจซ้ำ ๆ — ให้ใช้ Cron สำหรับงานในอนาคต
การแทนที่ด้วยตัวแปรสภาพแวดล้อม
| ตัวแปร | ผล |
|---|---|
OPENCLAW_BASH_YIELD_MS |
ระยะรอเริ่มต้นก่อนย้ายไปทำงานเบื้องหลัง (มิลลิวินาที) ค่าเริ่มต้น 10000 จำกัดอยู่ระหว่าง 10-120000 |
OPENCLAW_BASH_MAX_OUTPUT_CHARS |
ขีดจำกัดเอาต์พุตในหน่วยความจำ (จำนวนอักขระ) |
OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS |
ขีดจำกัด stdout/stderr ที่รอดำเนินการต่อสตรีม (จำนวนอักขระ) |
OPENCLAW_BASH_JOB_TTL_MS |
TTL สำหรับเซสชันที่เสร็จสิ้นแล้ว (มิลลิวินาที) จำกัดอยู่ระหว่าง 1 นาที-3 ชั่วโมง |
OPENCLAW_PROCESS_INPUT_WAIT_IDLE_MS |
เกณฑ์ระยะเวลาที่ไม่มีเอาต์พุต ก่อนทำเครื่องหมายเซสชันเบื้องหลังที่ยังเขียนข้อมูลได้ว่าน่าจะกำลังรออินพุต ค่าเริ่มต้น 15000 |
การกำหนดค่า (แนะนำให้ใช้แทนการแทนที่ด้วยตัวแปรสภาพแวดล้อม)
| คีย์ | ค่าเริ่มต้น | ผล |
|---|---|---|
tools.exec.backgroundMs |
10000 | เหมือนกับ OPENCLAW_BASH_YIELD_MS |
tools.exec.timeoutSec |
1800 | ระยะหมดเวลาเริ่มต้นต่อการเรียก |
tools.exec.cleanupMs |
1800000 | เหมือนกับ OPENCLAW_BASH_JOB_TTL_MS |
tools.exec.notifyOnExit |
true | เพิ่มเหตุการณ์ระบบเข้าคิว + ขอ Heartbeat เมื่อ exec ที่ทำงานเบื้องหลังสิ้นสุดลง |
tools.exec.notifyOnExitEmptySuccess |
false | เพิ่มเหตุการณ์เสร็จสิ้นเข้าคิวด้วย สำหรับการทำงานเบื้องหลังที่สำเร็จแต่ไม่มีเอาต์พุต |
การเชื่อมต่อโปรเซสลูก
เมื่อสร้างโปรเซสลูกที่ทำงานเป็นเวลานานนอกเครื่องมือ exec/process (การเริ่ม CLI ใหม่, ตัวช่วย Gateway) ให้แนบตัวช่วยเชื่อมต่อโปรเซสลูก เพื่อส่งต่อสัญญาณยุติการทำงานและถอดตัวรับฟังเมื่อออกจากโปรเซสหรือเกิดข้อผิดพลาด วิธีนี้ช่วยหลีกเลี่ยงโปรเซสกำพร้าบน systemd และทำให้การปิดระบบสอดคล้องกันในทุกแพลตฟอร์ม
เครื่องมือ process
การดำเนินการ:
| การดำเนินการ | ผล |
|---|---|
list |
เซสชันที่กำลังทำงาน + เสร็จสิ้นแล้ว |
poll |
ดึงเอาต์พุตใหม่ของเซสชันออกมา (รวมถึงรายงานสถานะการออก) |
log |
อ่านเอาต์พุตรวมและคำแนะนำสำหรับการกู้คืนอินพุต รองรับ offset + limit |
write |
ส่ง stdin (data, และ eof ซึ่งเป็นตัวเลือก) |
send-keys |
ส่งโทเค็นปุ่มหรือไบต์ที่ระบุไปยังเซสชันที่ใช้ PTY |
submit |
ส่ง Enter/อักขระขึ้นบรรทัดใหม่ไปยังเซสชันที่ใช้ PTY |
paste |
ส่งข้อความตามตัวอักษร โดยเลือกครอบด้วยโหมดวางแบบมีวงเล็บกำกับได้ |
kill |
ยุติเซสชันเบื้องหลัง |
clear |
ลบเซสชันที่เสร็จสิ้นแล้วออกจากหน่วยความจำ |
remove |
ยุติหากกำลังทำงาน มิฉะนั้นล้างหากเสร็จสิ้นแล้ว |
หมายเหตุ:
- จะแสดงรายการ/เก็บไว้เฉพาะเซสชันเบื้องหลังเท่านั้น — อยู่ในหน่วยความจำเท่านั้น ไม่ได้อยู่บนดิสก์ เซสชันจะสูญหายเมื่อโปรเซสเริ่มใหม่
- เซสชันเบื้องหลังที่ยังทำงานอยู่จะขัดขวางการพักโฮสต์แบบร่วมมือและการเริ่ม Gateway ใหม่อย่างปลอดภัย จนกว่าเจ้าของโปรเซสจะยืนยันว่าโปรเซสสิ้นสุดจริง
process removeสามารถซ่อนเซสชันที่กำลังทำงานได้ทันทีหลังจากขอยุติ แต่การพักและการเริ่มใหม่จะยังคงถูกขัดขวางจนกว่าจะยืนยันการสิ้นสุด- บันทึกเซสชันจะถูกบันทึกลงในประวัติแชตเฉพาะเมื่อคุณเรียกใช้
process poll/logและผลลัพธ์ของเครื่องมือถูกบันทึกไว้ processมีขอบเขตแยกตามเอเจนต์ โดยจะเห็นเฉพาะเซสชันที่เอเจนต์นั้นเริ่มไว้- ใช้
poll/logสำหรับตรวจสอบสถานะ บันทึก หรือยืนยันการเสร็จสิ้น เมื่อการปลุกอัตโนมัติเมื่อเสร็จสิ้นไม่พร้อมใช้งาน - ใช้
logก่อนกู้คืน CLI แบบโต้ตอบ เพื่อให้เห็นทรานสคริปต์ปัจจุบัน สถานะ stdin และคำแนะนำการรออินพุตพร้อมกัน - ใช้
write/send-keys/submit/paste/killเมื่อต้องการป้อนข้อมูลหรือแทรกแซง process listมีnameที่คำนวณขึ้น (กริยาของคำสั่ง + เป้าหมาย) เพื่อให้ตรวจดูได้อย่างรวดเร็วprocess list,pollและlogจะรายงานwaitingForInputเฉพาะเมื่อเซสชันยังมี stdin ที่เขียนได้ และไม่มีการทำงานนานกว่าเกณฑ์การรออินพุต (ค่าเริ่มต้น 15000 มิลลิวินาที,OPENCLAW_PROCESS_INPUT_WAIT_IDLE_MS)process logใช้offset/limitแบบอิงบรรทัด เมื่อไม่ระบุทั้งสองค่า ระบบจะส่งคืน 200 บรรทัดล่าสุดพร้อมคำแนะนำการแบ่งหน้า เมื่อระบุoffsetแต่ไม่ระบุlimitระบบจะส่งคืนตั้งแต่offsetถึงท้ายสุด (ไม่จำกัดไว้ที่ 200)timeoutของpollจะรอสูงสุดตามจำนวนมิลลิวินาทีที่กำหนดก่อนส่งคืน โดยค่าที่มากกว่า 30000 จะถูกจำกัดไว้ที่ 30000- การสำรวจมีไว้สำหรับตรวจสอบสถานะตามต้องการ ไม่ใช่สำหรับกำหนดตารางลูปการรอ หากงานควรเกิดขึ้นภายหลัง ให้ใช้ Cron
ตัวอย่าง
เรียกใช้งานที่ใช้เวลานานและสำรวจในภายหลัง:
{ "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }{ "tool": "process", "action": "poll", "sessionId": "<id>" }ตรวจสอบเซสชันแบบโต้ตอบก่อนส่งอินพุต:
{ "tool": "process", "action": "log", "sessionId": "<id>" }เริ่มทำงานเบื้องหลังทันที:
{ "tool": "exec", "command": "npm run build", "background": true }ส่ง stdin:
{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n" }ส่งปุ่ม PTY:
{ "tool": "process", "action": "send-keys", "sessionId": "<id>", "keys": ["C-c"] }ส่งบรรทัดปัจจุบัน:
{ "tool": "process", "action": "submit", "sessionId": "<id>" }วางข้อความตามตัวอักษร:
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }ที่เกี่ยวข้อง
Was this useful?