Заплановані завдання (Cron)
Cron — це вбудований планувальник Gateway. Він зберігає завдання, пробуджує агента в потрібний час і може повертати результат назад у канал чату або на endpoint вебхука.Швидкий старт
Як працює cron
- Cron працює всередині процесу Gateway (не всередині моделі).
- Завдання зберігаються в
~/.openclaw/cron/jobs.json, тому перезапуски не призводять до втрати розкладів. - Усі виконання cron створюють записи фонових завдань.
- Одноразові завдання (
--at) за замовчуванням автоматично видаляються після успішного виконання. - Ізольовані запуски cron у межах best-effort закривають відстежувані вкладки/процеси браузера для своєї сесії
cron:<jobId>після завершення запуску, щоб відокремлена автоматизація браузера не залишала осиротілі процеси. - Ізольовані запуски cron також захищають від застарілих відповідей-підтверджень. Якщо
перший результат — це лише проміжне оновлення стану (
on it,pulling everything togetherта подібні підказки), і жоден дочірній запуск subagent більше не відповідає за фінальну відповідь, OpenClaw повторно надсилає запит один раз для отримання фактичного результату перед доставкою.
lost.
Типи розкладу
| Тип | Прапорець CLI | Опис |
|---|---|---|
at | --at | Одноразова мітка часу (ISO 8601 або відносна, наприклад 20m) |
every | --every | Фіксований інтервал |
cron | --cron | Cron-вираз із 5 або 6 полів із необов’язковим --tz |
--tz America/New_York для планування за локальним часом.
Повторювані вирази на початок години автоматично зсуваються до 5 хвилин, щоб зменшити пікове навантаження. Використовуйте --exact, щоб примусово ввімкнути точний час, або --stagger 30s для явного вікна.
Стилі виконання
| Стиль | Значення --session | Запускається в | Найкраще підходить для |
|---|---|---|---|
| Основна сесія | main | Наступний цикл heartbeat | Нагадувань, системних подій |
| Ізольований | isolated | Виділена cron:<jobId> | Звітів, фонових завдань |
| Поточна сесія | current | Прив’язується під час створення | Повторюваної роботи з урахуванням контексту |
| Користувацька сесія | session:custom-id | Постійна іменована сесія | Процесів, що спираються на історію |
--wake now або --wake next-heartbeat). Ізольовані завдання запускають окремий цикл агента з новою сесією. Користувацькі сесії (session:xxx) зберігають контекст між запусками, що дає змогу будувати процеси на кшталт щоденних стендапів, які спираються на попередні підсумки.
Для ізольованих завдань teardown runtime тепер також включає best-effort очищення браузера для цієї сесії cron. Помилки очищення ігноруються, щоб фактичний результат cron усе одно мав пріоритет.
Коли ізольовані запуски cron оркеструють subagent, доставка також надає перевагу
фінальному результату дочірнього процесу над застарілим проміжним текстом батьківського. Якщо дочірні процеси все ще
виконуються, OpenClaw пригнічує це часткове оновлення батьківського процесу замість того, щоб оголошувати його.
Параметри payload для ізольованих завдань
--message: текст запиту (обов’язковий для isolated)--model/--thinking: перевизначення моделі та рівня thinking--light-context: пропустити ін’єкцію файлів bootstrap робочого простору--tools exec,read: обмежити, які інструменти може використовувати завдання
--model використовує вибрану дозволену модель для цього завдання. Якщо запитана модель
не дозволена, cron записує попередження в журнал і повертається до вибору моделі
агента/типової моделі для цього завдання. Налаштовані ланцюжки fallback усе ще застосовуються, але просте
перевизначення моделі без явного списку fallback для конкретного завдання більше не додає
основну модель агента як приховану додаткову ціль для повторної спроби.
Пріоритет вибору моделі для ізольованих завдань такий:
- Перевизначення моделі Gmail hook (коли запуск надійшов із Gmail і це перевизначення дозволене)
modelу payload конкретного завдання- Збережене перевизначення моделі сесії cron
- Вибір моделі агента/типової моделі
params.fastMode, ізольований cron використовує його за замовчуванням. Збережене перевизначення
сесії fastMode усе одно має пріоритет над конфігурацією в обох напрямках.
Якщо ізольований запуск потрапляє на передачу керування під час живого перемикання моделі, cron повторює спробу з
перемкнутим provider/model і зберігає цей поточний вибір перед повторною спробою. Коли
перемикання також несе новий профіль auth, cron зберігає і це перевизначення
профілю auth. Повторні спроби обмежені: після початкової спроби плюс 2 повторних спроб
перемикання cron перериває виконання замість нескінченного циклу.
Доставка та вивід
| Режим | Що відбувається |
|---|---|
announce | Доставити підсумок у цільовий канал (типово для isolated) |
webhook | Надіслати payload події завершення через POST на URL |
none | Лише внутрішньо, без доставки |
--announce --channel telegram --to "-1001234567890" для доставки в канал. Для тем форуму Telegram використовуйте -1001234567890:topic:123. Для цілей Slack/Discord/Mattermost слід використовувати явні префікси (channel:<id>, user:<id>).
Для ізольованих завдань, якими володіє cron, runner керує фінальним шляхом доставки. Агент
отримує запит повернути текстовий підсумок, а потім цей підсумок надсилається через
announce, webhook або зберігається внутрішньо для none. --no-deliver
не повертає доставку агенту; воно залишає запуск внутрішнім.
Якщо оригінальне завдання явно вказує написати якомусь зовнішньому отримувачу, агент
має зазначити виводом, кому/куди має бути надіслано це повідомлення, замість
спроби відправити його безпосередньо.
Сповіщення про збої йдуть окремим маршрутом призначення:
cron.failureDestinationзадає глобальне типове призначення для сповіщень про збої.job.delivery.failureDestinationперевизначає його для конкретного завдання.- Якщо не задано жодного з них, а завдання вже доставляє через
announce, сповіщення про збої тепер за замовчуванням повертаються до цієї основної цілі announce. delivery.failureDestinationпідтримується лише для завданьsessionTarget="isolated", якщо основний режим доставки не єwebhook.
Приклади CLI
Одноразове нагадування (основна сесія):Вебхуки
Gateway може відкривати endpoint-и HTTP вебхуків для зовнішніх тригерів. Увімкніть у конфігурації:Автентифікація
Кожен запит має містити токен hook через заголовок:Authorization: Bearer <token>(рекомендовано)x-openclaw-token: <token>
POST /hooks/wake
Поставити системну подію в чергу для основної сесії:text(обов’язково): опис подіїmode(необов’язково):now(типово) абоnext-heartbeat
POST /hooks/agent
Запустити ізольований цикл агента:message (обов’язково), name, agentId, wakeMode, deliver, channel, to, model, thinking, timeoutSeconds.
Зіставлені hook-и (POST /hooks/<name>)
Користувацькі назви hook-ів визначаються черезhooks.mappings у конфігурації. Зіставлення можуть перетворювати довільний payload на дії wake або agent за допомогою шаблонів чи трансформацій коду.
Безпека
- Тримайте endpoint-и hook-ів за loopback, tailnet або довіреним reverse proxy.
- Використовуйте окремий токен hook; не використовуйте повторно токени auth gateway.
- Тримайте
hooks.pathна окремому підшляху;/відхиляється. - Установіть
hooks.allowedAgentIds, щоб обмежити явну маршрутизаціюagentId. - Залишайте
hooks.allowRequestSessionKey=false, якщо вам не потрібні сесії, що обираються викликачем. - Якщо ви вмикаєте
hooks.allowRequestSessionKey, також задайтеhooks.allowedSessionKeyPrefixes, щоб обмежити допустимі форми ключів сесії. - Payload-и hook-ів за замовчуванням обгортаються межами безпеки.
Інтеграція Gmail PubSub
Підключіть тригери вхідної Gmail до OpenClaw через Google PubSub. Передумови:gcloud CLI, gog (gogcli), увімкнені hooks OpenClaw, Tailscale для публічного HTTPS endpoint.
Налаштування через майстер (рекомендовано)
hooks.gmail, вмикає пресет Gmail і використовує Tailscale Funnel для push endpoint.
Автозапуск Gateway
Колиhooks.enabled=true і задано hooks.gmail.account, Gateway під час запуску стартує gog gmail watch serve і автоматично поновлює watch. Установіть OPENCLAW_SKIP_GMAIL_WATCHER=1, щоб відмовитися від цього.
Ручне одноразове налаштування
- Виберіть проєкт GCP, який володіє OAuth client, що використовується
gog:
- Створіть topic і надайте Gmail доступ для push:
- Запустіть watch:
Перевизначення моделі Gmail
Керування завданнями
openclaw cron add|edit --model ...змінює вибрану модель завдання.- Якщо модель дозволена, саме цей provider/model потрапляє до ізольованого запуску агента.
- Якщо ні, cron попереджає та повертається до вибору моделі агента/типової моделі завдання.
- Налаштовані ланцюжки fallback усе ще застосовуються, але просте перевизначення
--modelбез явного списку fallback для конкретного завдання більше не переходить до основної моделі агента як до тихої додаткової цілі повторної спроби.
Конфігурація
cron.enabled: false або OPENCLAW_SKIP_CRON=1.
Повторна спроба для одноразових завдань: тимчасові помилки (обмеження швидкості, перевантаження, мережа, помилка сервера) повторюються до 3 разів з експоненційною затримкою. Постійні помилки негайно вимикаються.
Повторна спроба для повторюваних завдань: експоненційна затримка (від 30 с до 60 хв) між спробами. Затримка скидається після наступного успішного запуску.
Обслуговування: cron.sessionRetention (типово 24h) видаляє записи сесій ізольованих запусків. cron.runLog.maxBytes / cron.runLog.keepLines автоматично очищають файли журналу запусків.
Усунення несправностей
Послідовність команд
Cron не спрацьовує
- Перевірте
cron.enabledі змінну середовищаOPENCLAW_SKIP_CRON. - Підтвердьте, що Gateway працює безперервно.
- Для розкладів
cronперевірте часовий пояс (--tz) у порівнянні з часовим поясом хоста. reason: not-dueу виводі запуску означає, що ручний запуск було перевірено черезopenclaw cron run <jobId> --due, але час виконання завдання ще не настав.
Cron спрацював, але доставки немає
- Режим доставки
noneозначає, що зовнішнє повідомлення не очікується. - Відсутня/некоректна ціль доставки (
channel/to) означає, що вихідне надсилання було пропущено. - Помилки auth каналу (
unauthorized,Forbidden) означають, що доставку заблоковано обліковими даними. - Якщо ізольований запуск повертає лише тихий токен (
NO_REPLY/no_reply), OpenClaw пригнічує пряме вихідне надсилання, а також запасний шлях доставки підсумку через чергу, тому назад у чат нічого не публікується. - Для ізольованих завдань, якими володіє cron, не очікуйте, що агент використовуватиме інструмент message
як запасний варіант. Runner керує фінальною доставкою;
--no-deliverзалишає її внутрішньою, а не дозволяє пряме надсилання.
Особливості часових поясів
- Cron без
--tzвикористовує часовий пояс хоста gateway. - Розклади
atбез часового поясу трактуються як UTC. activeHoursдля heartbeat використовує налаштоване визначення часового поясу.
Пов’язане
- Автоматизація та завдання — огляд усіх механізмів автоматизації
- Фонові завдання — журнал завдань для виконань cron
- Heartbeat — періодичні цикли основної сесії
- Часовий пояс — налаштування часового поясу