---
read_when:
    - Вам нужны запланированные задания и пробуждения
    - Вы отлаживаете выполнение Cron и журналы.
summary: Справочник CLI для `openclaw cron` (планирование и запуск фоновых заданий)
title: Cron
x-i18n:
    generated_at: "2026-07-16T16:41:58Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 32
    provider: openai
    source_hash: eb897fde0798563144703cd2f3a2bc6c20229aa4135af9c6db41995e66ffd2d1
    source_path: cli/cron.md
    workflow: 16
---

# `openclaw cron`

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

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

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

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

`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>`.

<AccordionGroup>
  <Accordion title="Ключи сеансов">
    - `main` привязывается к основному сеансу агента.
    - `isolated` создает новую расшифровку и идентификатор сеанса для каждого запуска.
    - `current` привязывается к активному сеансу в момент создания.
    - `session:<id>` закрепляет явно заданный постоянный ключ сеанса.

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

## Доставка

`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`.
</Note>

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

Доставка изолированных сообщений 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`. Изолированные задания допускают его во всех режимах.
</Note>

Изолированные запуски 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`, чтобы сохранить их.
</Note>

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

После последовательных ошибок повторяющиеся задания используют экспоненциальную задержку между повторными попытками: 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` должно быть больше нуля.

<Note>
Используйте `--due`, если ручная команда должна выполняться только тогда, когда наступил срок запуска задания. Если `--due --wait` не ставит запуск в очередь, команда возвращает обычный ответ об отсутствии запуска вместо опроса.
</Note>

## Модели

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

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` больше не выдаёт повторные предупреждения о них.
</Note>

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

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

```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 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
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
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](/ru/cli)
- [Запланированные задачи](/ru/automation/cron-jobs)
