CLI commands

Cron

openclaw cron

Управление заданиями Cron для планировщика Gateway.

Быстрое создание заданий

openclaw cron create — псевдоним для openclaw cron add. Для новых заданий сначала укажите расписание, а затем запрос:

bash
openclaw cron create "0 7 * * *" \  "Суммируй обновления за ночь." \  --name "Утренняя сводка" \  --agent ops

Используйте --webhook <url>, если задание должно отправлять готовую полезную нагрузку методом POST вместо доставки в чат:

bash
openclaw cron create "0 18 * * 1-5" \  "Суммируй сегодняшние развертывания в формате JSON." \  --name "Сводка развертываний" \  --webhook "https://example.invalid/openclaw/cron"

Используйте --command для детерминированных заданий в стиле командной оболочки, которые выполняются внутри Cron OpenClaw без запуска изолированного агента или модели:

bash
openclaw cron create "*/15 * * * *" \  --name "Проверка глубины очереди" \  --command "scripts/check-queue.sh" \  --command-cwd "/srv/app" \  --announce \  --channel telegram \  --to "-1001234567890"

--command <shell> сохраняет argv: ["sh", "-lc", <shell>]. Используйте --command-argv '["node","scripts/report.mjs"]' для точного выполнения argv. Задания с командами перехватывают stdout/stderr, записывают обычную историю Cron и направляют вывод через те же режимы доставки announce, webhook или none, что и изолированные задания. Вывод команды, содержащий только NO_REPLY, подавляется.

Сеансы

--session принимает main, isolated, current или session:<id>.

Ключи сеансов
  • main привязывается к основному сеансу агента.
  • isolated создает новую расшифровку и идентификатор сеанса для каждого запуска.
  • current привязывается к активному сеансу в момент создания.
  • session:<id> закрепляет явно заданный постоянный ключ сеанса.
Семантика изолированного сеанса

Изолированные запуски сбрасывают контекст окружающего разговора. Для нового запуска сбрасываются маршрутизация по каналам и группам, политика отправки и постановки в очередь, повышение привилегий, источник и привязка среды выполнения ACP. Безопасные предпочтения и явно выбранные пользователем переопределения модели или аутентификации могут сохраняться между запусками.

Доставка

openclaw cron list и openclaw cron show <job-id> показывают предварительный просмотр разрешенного маршрута доставки. Для channel: "last" предварительный просмотр показывает, был ли маршрут разрешен из основного или текущего сеанса либо завершится ли разрешение безопасным отказом.

Цели с префиксом провайдера позволяют устранить неоднозначность неразрешенных каналов оповещения. Например, to: "telegram:123" выбирает Telegram, если delivery.channel не указан или имеет значение last. Селекторами провайдеров являются только префиксы, объявленные загруженным плагином. Если delivery.channel указан явно, префикс должен соответствовать этому каналу; сочетание channel: "whatsapp" с to: "telegram:123" отклоняется. Сервисные префиксы, такие как imessage: и sms:, остаются частью принадлежащего каналу синтаксиса цели.

Ответственность за доставку

Доставка изолированных сообщений Cron в чат совместно обеспечивается агентом и средой запуска:

  • Агент может отправлять сообщения напрямую с помощью инструмента message, если доступен маршрут чата.
  • announce выполняет резервную доставку окончательного ответа, только если агент не отправил его напрямую разрешенной цели.
  • webhook отправляет готовую полезную нагрузку по URL.
  • none отключает резервную доставку средой запуска.

Используйте cron add|create --webhook <url> или cron edit <job-id> --webhook <url>, чтобы настроить доставку через Webhook. Не сочетайте --webhook с флагами доставки в чат, такими как --announce, --no-deliver, --channel, --to, --thread-id или --account.

cron edit <job-id> позволяет отменять отдельные поля маршрутизации доставки с помощью --clear-channel, --clear-to, --clear-thread-id и --clear-account (каждое из них отклоняется при сочетании с соответствующим флагом установки). В отличие от --no-deliver, который лишь отключает резервную доставку средой запуска, они удаляют сохраненное поле, чтобы задание снова разрешало эту часть маршрута из значений по умолчанию.

--announce — резервная доставка окончательного ответа средой запуска. --no-deliver отключает эту резервную доставку, но не удаляет у агента инструмент message, если доступен маршрут чата.

Напоминания, созданные из активного чата, сохраняют текущую цель доставки чата для резервной доставки оповещений. Внутренние ключи сеансов могут быть записаны в нижнем регистре; не используйте их как достоверный источник для чувствительных к регистру идентификаторов провайдеров, таких как идентификаторы комнат Matrix.

Доставка уведомлений о сбоях

Цель уведомлений о сбоях разрешается в следующем порядке:

  1. delivery.failureDestination в задании.
  2. Глобальный cron.failureDestination.
  3. Основная цель оповещения задания (если ни один из предыдущих вариантов не разрешается в конкретное место назначения).

Изолированные запуски Cron считают сбои агента на уровне запуска ошибками задания, даже если полезная нагрузка ответа не создана, поэтому сбои модели или провайдера по-прежнему увеличивают счетчики ошибок и вызывают уведомления о сбоях.

Задания Cron с командами не запускают изолированный ход агента. Нулевой код завершения записывает ok; ненулевой код завершения, сигнал, тайм-аут или тайм-аут отсутствия вывода записывает error и может задействовать тот же путь уведомления о сбое.

Если изолированный запуск достигает тайм-аута до первого запроса к модели, openclaw cron show и openclaw cron runs содержат ошибку с указанием этапа, например setup timed out before runner start, либо сообщение о зависании с названием последнего известного этапа запуска (например, context-engine). Для провайдеров на базе CLI сторожевой таймер до обращения к модели остается активным до начала внешнего хода CLI, поэтому зависания при поиске сеанса, обработке хуков, аутентификации, подготовке запроса и настройке CLI регистрируются как сбои Cron до обращения к модели.

Планирование

Однократные задания

--at <datetime> планирует однократный запуск. Значения даты и времени без смещения считаются указанными в UTC, если также не передан --tz <iana>, который интерпретирует локальное время в заданном часовом поясе.

Повторяющиеся задания

После последовательных ошибок повторяющиеся задания используют экспоненциальную задержку между повторными попытками: 30s, 1m, 5m, 15m, 60m. После следующего успешного запуска расписание возвращается к нормальному режиму.

Пропущенные запуски отслеживаются отдельно от ошибок выполнения. Они не влияют на задержку между повторными попытками, но openclaw cron edit <job-id> --failure-alert-include-skipped позволяет включить повторные уведомления о пропущенных запусках в оповещения о сбоях.

Для изолированных заданий, нацеленных на локально настроенного провайдера моделей (базовый URL в кольцевом интерфейсе, частной сети или .local), Cron выполняет облегченную предварительную проверку провайдера перед запуском хода агента: провайдеры api: "ollama" проверяются по адресу /api/tags; другие локальные провайдеры, совместимые с OpenAI (api: "openai-completions", например vLLM, SGLang, LM Studio), проверяются по адресу /models. Если конечная точка недоступна, запуск записывается как skipped и повторяется по следующему расписанию; результат проверки доступности кэшируется для каждой конечной точки на 5 минут, чтобы множество заданий, обращающихся к одному локальному серверу, не перегружало его повторными проверками.

Задания Cron, ожидающее состояние среды выполнения и история запусков хранятся в общей базе данных состояния SQLite. Устаревшие файлы jobs.json, <name>-state.json и runs/*.jsonl импортируются один раз и переименовываются с суффиксом .migrated. После импорта изменяйте расписания с помощью openclaw cron add|edit|remove, а не редактируйте файлы JSON.

Ручные запуски

openclaw cron run <job-id> по умолчанию запускает задание принудительно и возвращает управление сразу после постановки ручного запуска в очередь. Успешные ответы содержат { ok: true, enqueued: true, runId }. Используйте возвращенный runId, чтобы позже проверить результат:

bash
openclaw cron run <job-id>openclaw cron runs --id <job-id> --run-id <run-id>

Добавьте --wait, если скрипт должен блокироваться, пока именно этот поставленный в очередь запуск не получит конечный статус:

bash
openclaw cron run <job-id> --wait --wait-timeout 10m --poll-interval 2s

При использовании --wait CLI сначала по-прежнему вызывает cron.run, а затем опрашивает cron.runs для возвращенного runId. Команда завершается с кодом 0, только если запуск завершается со статусом ok. Она завершается с ненулевым кодом, если запуск заканчивается со статусом error или skipped, если ответ Gateway не содержит runId или если истекает --wait-timeout (по умолчанию 10m, с опросом каждые 2s по умолчанию). Значение --poll-interval должно быть больше нуля.

Модели

cron add|edit --model <ref> выбирает разрешенную модель для задания. cron add|edit --fallbacks <list> задает резервные модели для отдельного задания, например --fallbacks openrouter/gpt-4.1-mini,openai/gpt-5; передайте --fallbacks "" для строгого запуска без резервных моделей. cron edit <job-id> --clear-fallbacks удаляет переопределение резервных моделей для задания. cron edit <job-id> --clear-model удаляет переопределение модели для задания, чтобы оно следовало обычному порядку выбора модели Cron (сохраненное переопределение сеанса Cron, если оно существует, иначе модель агента или модель по умолчанию); этот параметр нельзя сочетать с --model. cron add|edit --thinking <level> задает переопределение режима рассуждения для задания; cron edit <job-id> --clear-thinking удаляет его, чтобы задание следовало обычному порядку выбора режима рассуждения Cron, и его нельзя сочетать с --thinking.

Cron --model — это основная модель задания, а не переопределение /model сеанса чата. Это означает следующее:

  • Настроенные резервные модели продолжают применяться при сбое выбранной модели задания.
  • Заданная для задания полезная нагрузка fallbacks заменяет настроенный список резервных моделей, если она присутствует.
  • Пустой список резервных моделей для задания (--fallbacks "" или fallbacks: [] в полезной нагрузке задания или API) делает запуск Cron строгим.
  • Если у задания есть --model, но список резервных моделей не настроен, OpenClaw передает явное пустое переопределение резервных моделей, чтобы основная модель агента не добавлялась как скрытая цель повторной попытки.
  • Предварительные проверки локального провайдера перебирают настроенные резервные модели, прежде чем пометить запуск Cron как skipped.

openclaw doctor сообщает о заданиях, для которых уже задан payload.model, включая количество пространств имен провайдеров и несоответствия с agents.defaults.model. Используйте эту проверку, если поведение аутентификации, провайдера или выставления счетов различается между активным чатом и запланированными заданиями.

Порядок выбора модели изолированного Cron

Изолированный Cron разрешает активную модель в следующем порядке:

  1. Переопределение Gmail-хука.
  2. --model для отдельного задания.
  3. Сохраненное переопределение модели сеанса Cron (если пользователь выбрал модель).
  4. Модель агента или модель по умолчанию.

Быстрый режим

Изолированный быстрый режим Cron следует выбранной активной модели. Конфигурация модели params.fastMode применяется по умолчанию, однако сохранённое переопределение сеанса fastMode по-прежнему имеет приоритет над конфигурацией. Если выбран режим auto, пороговое значение определяется параметром params.fastAutoOnSeconds выбранной модели; по умолчанию оно составляет 60 секунд.

Повторные попытки при переключении активной модели

Если изолированный запуск выдаёт исключение LiveSessionModelSwitchError, перед повторной попыткой Cron сохраняет для активного запуска переключённые провайдер и модель (а также переопределение профиля аутентификации, если оно задано). Внешний цикл ограничен двумя повторными попытками переключения после первоначальной попытки, после чего выполнение прерывается во избежание бесконечного цикла.

Результаты запуска и отказы

Подавление устаревших подтверждений

В изолированных итерациях Cron подавляются устаревшие ответы, содержащие только подтверждение. Если первый результат представляет собой лишь промежуточное обновление состояния и ни один запуск дочернего субагента не отвечает за итоговый ответ, Cron один раз повторно запрашивает фактический результат перед доставкой.

Подавление токена молчания

Если изолированный запуск Cron возвращает только токен молчания (NO_REPLY или no_reply), Cron подавляет как прямую исходящую доставку, так и резервную отправку сводки через очередь, поэтому в чат ничего не отправляется.

Структурированные отказы

Изолированные запуски Cron используют структурированные метаданные отказа в выполнении из встроенного запуска (критические ошибки инструмента выполнения с кодом SYSTEM_RUN_DENIED или INVALID_REQUEST) как достоверный сигнал отказа. Также учитываются обёртки узла-хоста UNAVAILABLE вокруг вложенной структурированной ошибки с одним из этих кодов.

Cron не классифицирует текст итогового результата или похожие на отказ в одобрении фразы как отказы, если встроенный запуск также не предоставляет структурированные метаданные отказа. Поэтому обычный текст ассистента не считается заблокированной командой.

cron list и история запусков отображают причину отказа вместо представления заблокированной команды как ok.

Хранение

Правила хранения:

  • cron.sessionRetention (по умолчанию 24h; чтобы отключить, укажите false) удаляет завершённые сеансы изолированных запусков.
  • В истории запусков сохраняются последние 2000 итоговых строк для каждого задания Cron. Для потерянных строк сохраняется стандартный 24-часовой период очистки потерянных задач.

Миграция старых заданий

Распространённые изменения

Обновление настроек доставки без изменения сообщения:

bash
openclaw cron edit <job-id> --announce --channel telegram --to "123456789"

Отключение доставки для изолированного задания:

bash
openclaw cron edit <job-id> --no-deliver

Включение облегчённого начального контекста для изолированного задания:

bash
openclaw cron edit <job-id> --light-context

Отправка уведомлений в определённый канал:

bash
openclaw cron edit <job-id> --announce --channel slack --to "channel:C1234567890"

Отправка уведомлений в тему форума Telegram:

bash
openclaw cron edit <job-id> --announce --channel telegram --to "-1001234567890" --thread-id 42

Создание изолированного задания с облегчённым начальным контекстом:

bash
openclaw cron create "0 7 * * *" \  "Составить сводку ночных обновлений." \  --name "Облегчённая утренняя сводка" \  --session isolated \  --light-context \  --no-deliver

--light-context применяется только к изолированным заданиям итераций агента. При запусках Cron облегчённый режим оставляет начальный контекст пустым вместо внедрения полного набора начального контекста рабочего пространства.

Создание командного задания с точными значениями argv, cwd, переменных среды, стандартного ввода и ограничений вывода:

bash
openclaw cron create "*/30 * * * *" \  --name "Экспорт позиции" \  --command-argv '["node","scripts/export-position.mjs"]' \  --command-cwd "/srv/app" \  --command-env "NODE_ENV=production" \  --command-input '{"mode":"summary"}' \  --timeout-seconds 120 \  --no-output-timeout-seconds 30 \  --output-max-bytes 65536 \  --webhook "https://example.invalid/openclaw/cron"

Распространённые команды администрирования

Ручной запуск и проверка:

bash
openclaw cron listopenclaw cron list --agent opsopenclaw cron get <job-id>openclaw cron show <job-id>openclaw cron run <job-id>openclaw cron run <job-id> --dueopenclaw cron run <job-id> --wait --wait-timeout 10mopenclaw cron run <job-id> --wait --wait-timeout 10m --poll-interval 2sopenclaw cron runs --id <job-id> --limit 50openclaw cron runs --id <job-id> --run-id <run-id>

openclaw cron list по умолчанию показывает все соответствующие задания. Передайте --agent <id>, чтобы показать только задания, эффективный нормализованный идентификатор агента которых совпадает; задания без сохранённого идентификатора агента относятся к настроенному агенту по умолчанию.

openclaw cron get <job-id> возвращает непосредственно сохранённый JSON задания. Используйте cron show <job-id>, если требуется удобочитаемое представление с предварительным просмотром маршрута доставки.

cron list --json и cron show <job-id> --json включают поле верхнего уровня status для каждого задания, вычисляемое на основе enabled, state.runningAtMs и state.lastRunStatus. Возможные значения: disabled, running, ok, error, skipped или idle. Состояние JSON остаётся каноническим и не содержит декоративного оформления, чтобы внешние инструменты могли считывать состояние задания без его повторного вычисления; в удобочитаемом выводе повторяющиеся состояния error могут дополняться количеством сбоев.

Записи cron runs содержат диагностические данные доставки: предполагаемую цель Cron, фактически выбранную цель, отправки через инструмент сообщений, использование резервного пути и состояние доставки.

Переназначение агента и сеанса:

bash
openclaw cron edit <job-id> --agent opsopenclaw cron edit <job-id> --clear-agentopenclaw cron edit <job-id> --session currentopenclaw cron edit <job-id> --session "session:daily-brief"

openclaw cron add выдаёт предупреждение, если в заданиях итераций агента не указан --agent, и использует агента по умолчанию (main). Чтобы закрепить определённого агента, при создании передайте --agent <id>.

Настройка доставки:

bash
openclaw cron edit <job-id> --announce --channel slack --to "channel:C1234567890"openclaw cron edit <job-id> --webhook "https://example.invalid/openclaw/cron"openclaw cron edit <job-id> --best-effort-deliveropenclaw cron edit <job-id> --no-best-effort-deliveropenclaw cron edit <job-id> --no-deliver

Связанные материалы

Was this useful?
On this page

On this page