> ## Documentation Index
> Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Cron

# `openclaw cron`

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

> [!TIP]
>
> Выполните `openclaw cron --help`, чтобы просмотреть все доступные команды. Концептуальное руководство см. в разделе [Задания Cron](https://docs2.openclaw.ai/ru/automation/cron-jobs.md).

> [!NOTE]
>
> Для всех изменений Cron (`add`/`create`, `update`/`edit`, `remove`, `run`) требуется `operator.admin`. Запуски с командной полезной нагрузкой выполняются непосредственно в процессе Gateway, а не как вызов инструмента агента `tools.exec`; `tools.exec.*` и подтверждения выполнения по-прежнему регулируют доступные модели инструменты выполнения.

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

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

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw cron create "0 7 * * *" \
  "Суммируй обновления за ночь." \
  --name "Утренняя сводка" \
  --agent ops
```

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

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

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

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
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>`.

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

> [accordion] Семантика изолированного сеанса
>
> Изолированные запуски сбрасывают контекст окружающего разговора. Для нового запуска сбрасываются маршрутизация по каналам и группам, политика отправки и постановки в очередь, повышение привилегий, источник и привязка среды выполнения 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:`, остаются частью принадлежащего каналу синтаксиса цели.

> [!NOTE]
>
> Для изолированных заданий `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. Основная цель оповещения задания (если ни один из предыдущих вариантов не разрешается в конкретное место назначения).

> [!NOTE]
>
> Задания основного сеанса могут использовать `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>`, который интерпретирует локальное время в заданном часовом поясе.

> [!NOTE]
>
> По умолчанию однократные задания удаляются после успешного выполнения. Используйте `--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`, чтобы позже проверить результат:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw cron run <job-id>
openclaw cron runs --id <job-id> --run-id <run-id>
```

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

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
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` должно быть больше нуля.

> [!NOTE]
>
> Используйте `--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`.

> [!WARNING]
>
> Если модель не разрешена или ее невозможно разрешить, 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-часовой период очистки потерянных задач.

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

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

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

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

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw cron edit <job-id> --announce --channel telegram --to "123456789"
```

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

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw cron edit <job-id> --no-deliver
```

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

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw cron edit <job-id> --light-context
```

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

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw cron edit <job-id> --announce --channel slack --to "channel:C1234567890"
```

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

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw cron edit <job-id> --announce --channel telegram --to "-1001234567890" --thread-id 42
```

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

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

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

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

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
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 theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw cron list
openclaw cron list --agent ops
openclaw cron get <job-id>
openclaw cron show <job-id>
openclaw cron run <job-id>
openclaw cron run <job-id> --due
openclaw cron run <job-id> --wait --wait-timeout 10m
openclaw cron run <job-id> --wait --wait-timeout 10m --poll-interval 2s
openclaw cron runs --id <job-id> --limit 50
openclaw 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 theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw cron edit <job-id> --agent ops
openclaw cron edit <job-id> --clear-agent
openclaw cron edit <job-id> --session current
openclaw cron edit <job-id> --session "session:daily-brief"
```

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

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

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
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-deliver
openclaw cron edit <job-id> --no-best-effort-deliver
openclaw cron edit <job-id> --no-deliver
```

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

* [Справочник CLI](https://docs2.openclaw.ai/ru/cli.md)
* [Запланированные задачи](https://docs2.openclaw.ai/ru/automation/cron-jobs.md)
