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 завершённых сеансов (мс), ограничен диапазоном 1m-3h.
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 Отправить буквальный текст, при необходимости обёрнутый в режим bracketed paste.
kill Завершить фоновый сеанс.
clear Удалить завершённый сеанс из памяти.
remove Завершить принудительно, если сеанс выполняется, иначе очистить, если он завершён.

Примечания:

  • В списке сохраняются только фоновые сеансы — исключительно в памяти, не на диске. При перезапуске процесса сеансы теряются.
  • Активный фоновый сеанс блокирует совместное приостановление хоста и безопасный перезапуск Gateway, пока владелец процесса не подтвердит его фактическое завершение.
  • process remove может скрыть выполняющийся сеанс сразу после запроса завершения; приостановление и перезапуск остаются заблокированными до подтверждения выхода.
  • Журналы сеансов сохраняются в истории чата, только если выполнить process poll/log и результат инструмента будет записан.
  • process действует в рамках отдельного агента; он видит только сеансы, запущенные этим агентом.
  • Используйте poll/log для получения статуса, журналов или подтверждения завершения, когда автоматическое уведомление о завершении недоступно.
  • Перед восстановлением интерактивного CLI используйте log, чтобы одновременно видеть текущую расшифровку, состояние 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