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

ตัวอย่าง

เรียกใช้งานที่ใช้เวลานานและสำรวจในภายหลัง:

json
{ "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }
json
{ "tool": "process", "action": "poll", "sessionId": "<id>" }

ตรวจสอบเซสชันแบบโต้ตอบก่อนส่งอินพุต:

json
{ "tool": "process", "action": "log", "sessionId": "<id>" }

เริ่มทำงานเบื้องหลังทันที:

json
{ "tool": "exec", "command": "npm run build", "background": true }

ส่ง stdin:

json
{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n" }

ส่งปุ่ม PTY:

json
{ "tool": "process", "action": "send-keys", "sessionId": "<id>", "keys": ["C-c"] }

ส่งบรรทัดปัจจุบัน:

json
{ "tool": "process", "action": "submit", "sessionId": "<id>" }

วางข้อความตามตัวอักษร:

json
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }

ที่เกี่ยวข้อง

Was this useful?
On this page

On this page