Заплановані завдання (Cron)
Cron — це вбудований планувальник Gateway. Він зберігає завдання, пробуджує агента в потрібний час і може повертати результат назад у канал чату або до endpoint Webhook.Швидкий старт
Як працює cron
- Cron працює всередині процесу Gateway (а не всередині моделі).
- Визначення завдань зберігаються в
~/.openclaw/cron/jobs.json, тому перезапуски не призводять до втрати розкладів. - Стан виконання під час роботи зберігається поруч у
~/.openclaw/cron/jobs-state.json. Якщо ви відстежуєте визначення cron у git, відстежуйтеjobs.json, аjobs-state.jsonдодайте до gitignore. - Після цього розділення старіші версії OpenClaw можуть читати
jobs.json, але можуть вважати завдання новими, оскільки поля стану виконання тепер зберігаються вjobs-state.json. - Усі виконання cron створюють записи фонових завдань.
- Одноразові завдання (
--at) типово автоматично видаляються після успішного виконання. - Ізольовані запуски cron після завершення намагаються закрити відстежувані вкладки браузера/процеси для своєї сесії
cron:<jobId>, щоб відокремлена автоматизація браузера не залишала осиротілі процеси. - Ізольовані запуски cron також захищають від застарілих відповідей-підтверджень. Якщо
перший результат — це лише проміжне оновлення статусу (
on it,pulling everything togetherта подібні підказки) і жоден дочірній запуск субагента більше не відповідає за фінальну відповідь, OpenClaw повторно надсилає запит один раз, щоб отримати фактичний результат перед доставленням.
lost.
Типи розкладу
| Вид | Прапорець CLI | Опис |
|---|---|---|
at | --at | Одноразова позначка часу (ISO 8601 або відносна, наприклад 20m) |
every | --every | Фіксований інтервал |
cron | --cron | Вираз cron із 5 або 6 полів з необов’язковим --tz |
--tz America/New_York для планування за локальним часом.
Періодичні вирази на початок години автоматично розносяться в межах до 5 хвилин, щоб зменшити піки навантаження. Використовуйте --exact, щоб примусово задати точний час, або --stagger 30s для явного вікна.
День місяця і день тижня використовують логіку OR
Вирази cron парсяться через croner. Коли і поле дня місяця, і поле дня тижня не є wildcard, croner виконує збіг, якщо будь-яке з полів збігається, а не обидва. Це стандартна поведінка Vixie cron.+ у Croner (0 9 15 * +1) або плануйте за одним полем, а інше перевіряйте в prompt чи команді вашого завдання.
Стилі виконання
| Стиль | Значення --session | Виконується в | Найкраще підходить для |
|---|---|---|---|
| Основна сесія | main | Наступний такт heartbeat | Нагадувань, системних подій |
| Ізольований | isolated | Виділена cron:<jobId> | Звітів, фонових завдань |
| Поточна сесія | current | Прив’язується під час створення | Періодичної роботи з урахуванням контексту |
| Користувацька сесія | session:custom-id | Постійна іменована сесія | Робочих процесів, що спираються на історію |
--wake now або --wake next-heartbeat). Ізольовані завдання виконують окремий хід агента з новою сесією. Користувацькі сесії (session:xxx) зберігають контекст між запусками, що дає змогу реалізовувати робочі процеси на кшталт щоденних стендапів, які спираються на попередні підсумки.
Для ізольованих завдань завершення виконання тепер включає найкращу спробу очищення браузера для цієї cron-сесії. Помилки очищення ігноруються, щоб фактичний результат cron усе одно мав пріоритет.
Коли ізольовані запуски cron оркеструють субагентів, під час доставлення також
перевага надається фінальному результату дочірнього запуску, а не застарілому проміжному тексту батьківського.
Якщо дочірні запуски все ще виконуються, OpenClaw пригнічує це часткове оновлення батьківського процесу, замість того щоб оголошувати його.
Параметри payload для ізольованих завдань
--message: текст prompt (обов’язковий для ізольованих)--model/--thinking: перевизначення моделі та рівня thinking--light-context: пропустити ін’єкцію bootstrap-файлів робочого простору--tools exec,read: обмежити, які інструменти може використовувати завдання
--model використовує вибрану дозволену модель для цього завдання. Якщо запитана модель
не дозволена, cron записує попередження в журнал і повертається до вибору моделі агента/типової моделі для цього завдання.
Налаштовані ланцюжки fallback, як і раніше, застосовуються, але звичайне перевизначення
моделі без явного списку fallback для конкретного завдання більше не додає основну модель агента як приховану додаткову ціль повторної спроби.
Пріоритет вибору моделі для ізольованих завдань такий:
- Перевизначення моделі hook Gmail (коли запуск походить із Gmail і це перевизначення дозволене)
modelу payload конкретного завдання- Збережене перевизначення моделі сесії cron
- Вибір моделі агента/типової моделі
params.fastMode, ізольований cron використовує його типово. Збережене перевизначення
fastMode сесії все одно має пріоритет над конфігурацією в будь-якому напрямку.
Якщо ізольований запуск потрапляє на живе передавання керування під час перемикання моделі, cron повторює спробу з
перемкненим провайдером/моделлю та зберігає цей активний вибір перед повторною спробою. Коли
перемикання також несе новий профіль автентифікації, cron також зберігає це перевизначення профілю автентифікації.
Кількість повторних спроб обмежена: після початкової спроби та ще 2 повторних спроб через перемикання
cron переривається, а не зациклюється назавжди.
Доставлення і результат
| Режим | Що відбувається |
|---|---|
announce | Запасне доставлення фінального тексту до цілі, якщо агент не надіслав |
webhook | POST payload завершеної події на URL |
none | Немає запасного доставлення з боку runner |
--announce --channel telegram --to "-1001234567890" для доставлення в канал. Для тем форуму Telegram використовуйте -1001234567890:topic:123. Цілі Slack/Discord/Mattermost мають використовувати явні префікси (channel:<id>, user:<id>).
Для ізольованих завдань доставлення в чат є спільним. Якщо маршрут чату доступний,
агент може використовувати інструмент message навіть коли завдання використовує --no-deliver. Якщо
агент надсилає повідомлення до налаштованої/поточної цілі, OpenClaw пропускає запасне
оголошення. Інакше announce, webhook і none лише керують тим, що
runner робить із фінальною відповіддю після ходу агента.
Сповіщення про помилки йдуть окремим маршрутом призначення:
cron.failureDestinationзадає глобальне типове значення для сповіщень про помилки.job.delivery.failureDestinationперевизначає це для конкретного завдання.- Якщо не задано жодного з них і завдання вже доставляє результат через
announce, сповіщення про помилки тепер запасно надсилаються до цієї ж основної цілі announce. delivery.failureDestinationпідтримується лише для завдань ізsessionTarget="isolated", якщо основний режим доставлення не єwebhook.
Приклади CLI
Одноразове нагадування (основна сесія):Webhook-и
Gateway може відкривати HTTP endpoint-и Webhook для зовнішніх тригерів. Увімкніть це в конфігурації:Автентифікація
Кожен запит має містити токен 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-ів; не використовуйте повторно токени автентифікації gateway.
- Тримайте
hooks.pathна окремому підшляху;/відхиляється. - Встановіть
hooks.allowedAgentIds, щоб обмежити явну маршрутизаціюagentId. - Тримайте
hooks.allowRequestSessionKey=false, якщо вам не потрібні сесії, які вибирає викликач. - Якщо ви вмикаєте
hooks.allowRequestSessionKey, також установітьhooks.allowedSessionKeyPrefixes, щоб обмежити дозволені форми ключів сесії. - Payload-и hook-ів типово обгортаються межами безпеки.
Інтеграція Gmail PubSub
Підключіть тригери вхідної пошти Gmail до OpenClaw через Google PubSub. Передумови: CLIgcloud, gog (gogcli), увімкнені hooks OpenClaw, Tailscale для публічного HTTPS endpoint.
Налаштування через майстер (рекомендовано)
hooks.gmail, вмикає preset 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-клієнт, що використовується
gog:
- Створіть topic і надайте Gmail доступ для push:
- Запустіть watch:
Перевизначення моделі Gmail
Керування завданнями
openclaw cron add|edit --model ...змінює вибрану модель завдання.- Якщо модель дозволена, саме цей провайдер/модель використовується в ізольованому запуску агента.
- Якщо її не дозволено, cron попереджає й повертається до вибору моделі агента/типової моделі завдання.
- Налаштовані ланцюжки fallback, як і раніше, застосовуються, але звичайне перевизначення
--modelбез явного списку fallback для конкретного завдання більше не переходить до основної моделі агента як до тихої додаткової цілі повторної спроби.
Конфігурація
cron.store: сховище .json, таке як
~/clawd/cron/jobs.json, використовує ~/clawd/cron/jobs-state.json, а до шляху сховища
без суфікса .json додається -state.json.
Вимкнути cron: 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означає, що запасне надсилання з боку runner не очікується. Агент усе ще може надіслати повідомлення безпосередньо через інструментmessage, якщо маршрут чату доступний. - Відсутня/невалідна ціль доставлення (
channel/to) означає, що вихідне надсилання було пропущено. - Помилки автентифікації каналу (
unauthorized,Forbidden) означають, що доставлення було заблоковано обліковими даними. - Якщо ізольований запуск повертає лише silent token (
NO_REPLY/no_reply), OpenClaw пригнічує пряме вихідне доставлення, а також пригнічує запасний шлях зведення через чергу, тому назад у чат нічого не публікується. - Якщо агент має сам надіслати повідомлення користувачу, перевірте, що завдання має придатний
маршрут (
channel: "last"із попереднім чатом або явний канал/ціль).
Поширені проблеми з часовими поясами
- Cron без
--tzвикористовує часовий пояс хоста gateway. - Розклади
atбез часового поясу трактуються як UTC. activeHoursHeartbeat використовує налаштоване визначення часового поясу.
Пов’язане
- Автоматизація й завдання — огляд усіх механізмів автоматизації
- Фонові завдання — журнал завдань для виконань cron
- Heartbeat — періодичні ходи основної сесії
- Часовий пояс — конфігурація часового поясу