Chuyển đến nội dung chính

Công Cụ Thực Thi Nền + Quản Lý Tiến Trình

OpenClaw thực thi các lệnh shell thông qua công cụ exec và giữ các tác vụ dài trong bộ nhớ. Công cụ process quản lý các phiên nền đó.

Công cụ exec

Các tham số chính:
  • command (bắt buộc)
  • yieldMs (mặc định 10000): tự động chuyển nền sau khoảng thời gian này
  • background (bool): chuyển nền ngay lập tức
  • timeout (giây, mặc định 1800): dừng tiến trình sau thời gian này
  • elevated (bool): chạy trên host nếu chế độ nâng cao được bật/cho phép
  • Cần TTY thực? Đặt pty: true.
  • workdir, env
Hành vi:
  • Chạy nền trước trả về kết quả trực tiếp.
  • Khi chuyển nền (tự động hoặc do timeout), công cụ trả về status: "running" + sessionId và một đoạn ngắn.
  • Kết quả được giữ trong bộ nhớ cho đến khi phiên được kiểm tra hoặc xóa.
  • Nếu công cụ process không được phép, exec chạy đồng bộ và bỏ qua yieldMs/background.
  • Các lệnh exec được khởi tạo nhận OPENCLAW_SHELL=exec để áp dụng các quy tắc shell/profile theo ngữ cảnh.

Kết nối tiến trình con

Khi khởi tạo các tiến trình con dài bên ngoài công cụ exec/process (ví dụ: CLI respawns hoặc gateway helpers), gắn kết nối trợ giúp tiến trình con để tín hiệu kết thúc được chuyển tiếp và các listener được tách ra 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 máy nhất quán trên các nền tảng. Ghi đè môi trường:
  • PI_BASH_YIELD_MS: thời gian yield mặc định (ms)
  • PI_BASH_MAX_OUTPUT_CHARS: giới hạn kết quả trong bộ nhớ (ký tự)
  • OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS: giới hạn stdout/stderr đang chờ xử lý mỗi luồng (ký tự)
  • PI_BASH_JOB_TTL_MS: TTL cho các phiên đã hoàn thành (ms, giới hạn từ 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): xếp hàng một sự kiện hệ thống + yêu cầu heartbeat khi một exec nền kết thúc.
  • tools.exec.notifyOnExitEmptySuccess (mặc định false): khi true, cũng xếp hàng các sự kiện hoàn thành cho các lần chạy nền thành công không tạo ra kết quả.

Công cụ process

Các hành động:
  • list: các phiên đang chạy + đã hoàn thành
  • poll: lấy kết quả mới cho một phiên (cũng báo cáo trạng thái thoát)
  • log: đọc kết quả tổng hợp (hỗ trợ offset + limit)
  • write: gửi stdin (data, eof tùy chọn)
  • kill: kết thúc một phiên nền
  • clear: xóa một phiên đã hoàn thành khỏi bộ nhớ
  • remove: kết thúc nếu đang chạy, nếu không thì xóa nếu đã hoàn thành
Lưu ý:
  • Chỉ các phiên nền mới được liệt kê/lưu trữ trong bộ nhớ.
  • Các phiên bị mất khi tiến trình khởi động lại (không lưu 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/log và kết quả công cụ được ghi lại.
  • process được giới hạn theo agent; nó chỉ thấy các phiên được khởi tạo bởi agent đó.
  • process list bao gồm một name được suy ra (động từ lệnh + mục tiêu) để quét nhanh.
  • process log sử dụng offset/limit dựa trên dòng.
  • Khi cả offsetlimit đều bị bỏ qua, nó trả về 200 dòng cuối cùng và bao gồm gợi ý phân trang.
  • Khi offset được cung cấp và limit bị bỏ qua, nó trả về từ offset đến cuối (không giới hạn 200).

Ví dụ

Chạy một tác vụ dài và kiểm tra sau:
{ "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }
{ "tool": "process", "action": "poll", "sessionId": "<id>" }
Bắt đầu ngay lập tức trong nền:
{ "tool": "exec", "command": "npm run build", "background": true }
Gửi stdin:
{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n" }
Last modified on March 22, 2026