Gateway
Công cụ exec chạy nền và tiến trình
OpenClaw chạy các lệnh shell thông qua công cụ exec và giữ các tác vụ chạy dài trong bộ nhớ. Công cụ process quản lý các phiên nền đó.
Công cụ exec
Tham số chính:
command(bắt buộc)yieldMs(mặc định 10000): tự động chuyển sang nền sau độ trễ nàybackground(bool): chuyển sang nền ngay lập tứctimeout(giây, mặc địnhtools.exec.timeoutSec): kết thúc tiến trình sau thời gian chờ này; chỉ đặttimeout: 0để tắt thời gian chờ của tiến trình exec cho lệnh gọi đóelevated(bool): chạy bên ngoài sandbox nếu chế độ nâng quyền được bật/cho phép (gatewaytheo mặc định, hoặcnodekhi mục tiêu exec lànode)- Cần TTY thật? Đặt
pty: true. workdir,env
Hành vi:
- Các lần chạy tiền cảnh trả về đầu ra trực tiếp.
- Khi được chuyển sang nền (rõ ràng hoặc do hết thời gian), công cụ trả về
status: "running"+sessionIdvà một phần đuôi ngắn. - Các lần chạy nền và
yieldMskế thừatools.exec.timeoutSectrừ khi lệnh gọi cung cấptimeoutrõ ràng. - Đầu ra được giữ trong bộ nhớ cho đến khi phiên được thăm dò hoặc xóa.
- Nếu công cụ
processkhông được cho phép,execchạy đồng bộ và bỏ quayieldMs/background. - Các lệnh exec được sinh ra nhận
OPENCLAW_SHELL=execcho các quy tắc shell/profile nhận biết ngữ cảnh. - Với công việc chạy dài bắt đầu ngay bây giờ, hãy khởi động một lần và dựa vào cơ chế đánh thức khi hoàn tất tự động khi cơ chế này được bật và lệnh phát ra đầu ra hoặc thất bại.
- Nếu cơ chế đánh thức khi hoàn tất tự động không khả dụng, hoặc bạn cần xác nhận
thành công im lặng cho một lệnh đã thoát sạch mà không có đầu ra, hãy dùng
processđể xác nhận hoàn tất. - Không mô phỏng nhắc nhở hoặc theo dõi trễ bằng vòng lặp
sleephay thăm dò lặp lại; hãy dùng cron cho công việc trong tương lai.
Bắc cầu tiến trình con
Khi sinh các tiến trình con chạy dài bên ngoài công cụ exec/process (ví dụ: CLI tái sinh hoặc trình trợ giúp Gateway), hãy gắn trình trợ giúp cầu nối tiến trình con để tín hiệu kết thúc được chuyển tiếp và các listener được gỡ khi thoát/lỗi. Điều này tránh các tiến trình mồ côi trên systemd và giữ hành vi tắt nhất quán giữa các nền tảng.
Ghi đè môi trường:
PI_BASH_YIELD_MS: yield mặc định (ms)PI_BASH_MAX_OUTPUT_CHARS: giới hạn đầu ra trong bộ nhớ (ký tự)OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS: giới hạn stdout/stderr đang chờ cho mỗi luồng (ký tự)PI_BASH_JOB_TTL_MS: TTL cho các phiên đã hoàn tất (ms, bị giới hạn trong 1m–3h)
Cấu hình (ưu tiên):
tools.exec.backgroundMs(mặc định 10000)tools.exec.timeoutSec(mặc định 1800)tools.exec.cleanupMs(mặc định 1800000)tools.exec.notifyOnExit(mặc định true): đưa một sự kiện hệ thống vào hàng đợi + yêu cầu heartbeat khi một exec chạy nền thoát.tools.exec.notifyOnExitEmptySuccess(mặc định false): khi true, cũng đưa sự kiện hoàn tất vào hàng đợi cho các lần chạy nền thành công nhưng không tạo đầu ra.
Công cụ process
Hành động:
list: các phiên đang chạy + đã hoàn tấtpoll: rút đầu ra mới cho một phiên (đồng thời báo cáo trạng thái thoát)log: đọc đầu ra tổng hợp (hỗ trợoffset+limit)write: gửi stdin (data, tùy chọneof)send-keys: gửi token phím rõ ràng hoặc byte đến phiên có PTY hỗ trợsubmit: gửi Enter / carriage return đến phiên có PTY hỗ trợpaste: gửi văn bản nguyên văn, tùy chọn bọc trong chế độ dán có ngoặckill: kết thúc một phiên nềnclear: xóa một phiên đã hoàn tất khỏi bộ nhớremove: kill nếu đang chạy, nếu không thì clear nếu đã hoàn tất
Ghi chú:
- Chỉ các phiên được chuyển sang nền mới được liệt kê/duy trì trong bộ nhớ.
- Các phiên sẽ mất khi tiến trình khởi động lại (không có duy trì trên đĩa).
- Nhật ký phiên chỉ được lưu vào lịch sử chat nếu bạn chạy
process poll/logvà kết quả công cụ được ghi lại. processđược giới hạn theo từng tác tử; nó chỉ thấy các phiên do tác tử đó khởi động.- Dùng
poll/logcho trạng thái, nhật ký, xác nhận thành công im lặng, hoặc xác nhận hoàn tất khi cơ chế đánh thức khi hoàn tất tự động không khả dụng. - Dùng
write/send-keys/submit/paste/killkhi bạn cần nhập liệu hoặc can thiệp. process listbao gồmnamesuy ra (động từ lệnh + mục tiêu) để quét nhanh.process logdùngoffset/limitdựa trên dòng.- Khi cả
offsetvàlimitđều bị bỏ qua, nó trả về 200 dòng cuối và bao gồm gợi ý phân trang. - Khi cung cấp
offsetvà bỏ qualimit, nó trả về từoffsetđến cuối (không bị giới hạn ở 200). - Thăm dò dùng cho trạng thái theo yêu cầu, không phải lập lịch vòng lặp chờ. Nếu công việc nên xảy ra sau, hãy dùng cron thay thế.
Ví dụ
Chạy một tác vụ dài và thăm dò sau:
{ "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }
{ "tool": "process", "action": "poll", "sessionId": "<id>" }
Bắt đầu ngay trong nền:
{ "tool": "exec", "command": "npm run build", "background": true }
Gửi stdin:
{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n" }
Gửi phím PTY:
{ "tool": "process", "action": "send-keys", "sessionId": "<id>", "keys": ["C-c"] }
Gửi dòng hiện tại:
{ "tool": "process", "action": "submit", "sessionId": "<id>" }
Dán văn bản nguyên văn:
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }