Skip to main content

openclaw cron

Управление заданиями Cron для планировщика Gateway.
Выполните openclaw cron --help, чтобы просмотреть все доступные команды. Концептуальное руководство см. в разделе Задания Cron.
Для всех изменений Cron (add/create, update/edit, remove, run) требуется operator.admin. Запуски с командной полезной нагрузкой выполняются непосредственно в процессе Gateway, а не как вызов инструмента агента tools.exec; tools.exec.* и подтверждения выполнения по-прежнему регулируют доступные модели инструменты выполнения.

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

openclaw cron create — псевдоним для openclaw cron add. Для новых заданий сначала укажите расписание, а затем запрос:
Используйте --webhook <url>, если задание должно отправлять готовую полезную нагрузку методом POST вместо доставки в чат:
Используйте --command для детерминированных заданий в стиле командной оболочки, которые выполняются внутри Cron OpenClaw без запуска изолированного агента или модели:
--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 add по умолчанию используется доставка --announce. Используйте --no-deliver, чтобы оставить вывод внутренним. --deliver остается устаревшим псевдонимом для --announce.

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

Доставка изолированных сообщений 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. Основная цель оповещения задания (если ни один из предыдущих вариантов не разрешается в конкретное место назначения).
Задания основного сеанса могут использовать delivery.failureDestination, только если основным режимом доставки является webhook. Изолированные задания допускают его во всех режимах.
Изолированные запуски 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>, который интерпретирует локальное время в заданном часовом поясе.
По умолчанию однократные задания удаляются после успешного выполнения. Используйте --keep-after-run, чтобы сохранить их.

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

После последовательных ошибок повторяющиеся задания используют экспоненциальную задержку между повторными попытками: 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, чтобы позже проверить результат:
Добавьте --wait, если скрипт должен блокироваться, пока именно этот поставленный в очередь запуск не получит конечный статус:
При использовании --wait CLI сначала по-прежнему вызывает cron.run, а затем опрашивает cron.runs для возвращенного runId. Команда завершается с кодом 0, только если запуск завершается со статусом ok. Она завершается с ненулевым кодом, если запуск заканчивается со статусом error или skipped, если ответ Gateway не содержит runId или если истекает --wait-timeout (по умолчанию 10m, с опросом каждые 2s по умолчанию). Значение --poll-interval должно быть больше нуля.
Используйте --due, если ручная команда должна выполняться только тогда, когда наступил срок запуска задания. Если --due --wait не ставит запуск в очередь, команда возвращает обычный ответ об отсутствии запуска вместо опроса.

Модели

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 завершает запуск с явной ошибкой проверки вместо перехода к модели агента задания или модели по умолчанию.
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-часовой период очистки потерянных задач.

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

Если задания Cron были созданы до введения текущего формата доставки и хранения, выполните openclaw doctor --fix. Doctor нормализует устаревшие поля Cron (jobId, schedule.cron, поля доставки верхнего уровня, включая устаревшее поле threadId, и псевдонимы доставки полезной нагрузки provider) и переносит резервные задания Webhook notify: true из cron.webhook в явную доставку через Webhook. Задания, которые уже отправляют уведомления в чат, сохраняют этот способ доставки и получают адрес назначения Webhook для уведомления о завершении. Если cron.webhook не задано, неактивный маркер верхнего уровня notify удаляется из заданий, для которых нет цели миграции (существующий способ доставки сохраняется без изменений), поэтому doctor --fix больше не выдаёт повторные предупреждения о них.

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

Обновление настроек доставки без изменения сообщения:
Отключение доставки для изолированного задания:
Включение облегчённого начального контекста для изолированного задания:
Отправка уведомлений в определённый канал:
Отправка уведомлений в тему форума Telegram:
Создание изолированного задания с облегчённым начальным контекстом:
--light-context применяется только к изолированным заданиям итераций агента. При запусках Cron облегчённый режим оставляет начальный контекст пустым вместо внедрения полного набора начального контекста рабочего пространства. Создание командного задания с точными значениями argv, cwd, переменных среды, стандартного ввода и ограничений вывода:

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

Ручной запуск и проверка:
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, фактически выбранную цель, отправки через инструмент сообщений, использование резервного пути и состояние доставки. Переназначение агента и сеанса:
openclaw cron add выдаёт предупреждение, если в заданиях итераций агента не указан --agent, и использует агента по умолчанию (main). Чтобы закрепить определённого агента, при создании передайте --agent <id>. Настройка доставки:

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