Cron-задачи в OpenClaw: автоматизация по расписанию
Если вы до сих пор встаёте в 8:45, чтобы вручную запускать рассылку дайджеста, — у нас для вас новость: в OpenClaw есть встроенный cron. Назначьте задачу один раз, и пусть сервер сам ворочается по ночам, пока вы спите. В этой статье разберёмся, как добавлять cron-задачи, как читать расписание и чем внутренний cron отличается отheartbeat. Без воды, но с небольшой долей сарказма.
<h1>Cron-задачи в OpenClaw: автоматизация по расписанию</h1> <p class="lead">Если вы до сих пор встаёте в 8:45, чтобы вручную запускать рассылку дайджеста, — у нас для вас новость: в OpenClaw есть встроенный cron. Назначьте задачу один раз, и пусть сервер сам ворочается по ночам, пока вы спите. В этой статье разберёмся, как добавлять cron-задачи, как читать расписание и чем внутренний cron отличается от <a href="https://vibe.egetech.ru/docs/openclaw/heartbeat">heartbeat</a>. Без воды, но с небольшой долей сарказма.</p> <h2>Зачем встроенный cron, а не системный?</h2> <p>Да, у Linux есть <code>crontab</code>, и он работает. Но встроенный планировщик OpenClaw живёт в том же контексте, что и ваше приложение: видит переменные окружения, секреты, реестр задач и пишет логи в одно место. Вам не придётся танцевать с <code>sudo</code>, путями и интерпретаторами.</p> <ul> <li>Задачи хранятся рядом с конфигом приложения, а не где-то в <code>/var/spool/cron</code>.</li> <li>Логи попадают туда же, куда и логи OpenClaw — проще искать причину падения.</li> <li>Не нужны дополнительные права на уровне ОС.</li> <li>Поддерживаются <code>--dry-run</code>, хуки и повторы при ошибках.</li> </ul> <p>Короче: забудьте магию с <code>sudo crontab -e</code> и молитвы о том, что <code>PYTHONPATH</code> не сбежит. Если OpenClaw уже запущен, пусть сам себя автоматизирует.</p> <h2>Cron и heartbeat — разные вещи. Не путайте</h2> <p>Это важный момент, потому что новички регулярно пытаются натравить heartbeat на ежедневные отчёты, а cron — на проверку «жив ли сервис». Не надо так.</p> <ul> <li><strong>Heartbeat</strong> — это короткий интервал в секундах или минутах. Он говорит: «Я живой?» и запускает самовосстановление, если сервис заглох.</li> <li><strong>Cron</strong> — это календарное расписание. Он говорит: «Сделай это ровно в 09:00» или «каждое воскресенье в 03:00».</li> <li>Heartbeat не понимает cron-выражений вроде <code>0 9 </code>.</li> <li>Cron не следит за доступностью сервиса в реальном времени.</li> </ul> <p>Если heartbeat — это няня, которая проверяет пульс каждые 30 секунд, то cron — это будильник, который будит вас в конкретный час. Пытаться устроить ежедневный дайджест через heartbeat всё равно что просить няню будить вас в 9 утра каждые полминуты: работать будет, но все вокруг возненавидят процесс.</p> <h2>Как добавить cron-задачу</h2> <p>В OpenClaw задачи можно добавлять двумя способами: через <a href="https://vibe.egetech.ru/docs/openclaw/cli">CLI</a> или в конфиге. CLI удобен для экспериментов, конфиг — для постоянного хранения в репозитории.</p> <h3>Через CLI</h3> <p>Самый быстрый путь — команда <code>openclaw cron:add</code>. Указываете имя, расписание и команду:</p> <p><code>openclaw cron:add --name=daily-digest --schedule="0 9 " --command="openclaw digest:send"</code></p> <p>Посмотреть список активных задач:</p> <p><code>openclaw cron:list</code></p> <p>Запустить задачу вручную, не дожидаясь расписания:</p> <p><code>openclaw cron:run daily-digest --dry-run</code></p> <p>А если задача больше не нужна:</p> <p><code>openclaw cron:remove daily-digest</code></p> <h3>Через конфиг</h3> <p>Если вы любите, чтобы всё было под версионным контролем, опишите задачи в <code>openclaw.yaml</code>:</p> <pre><code>cron: <p>tasks:</p> <ul> <li>name: daily-digest</li> <p></p></ul> schedule: "0 9 *" command: "openclaw digest:send" timeout: 300 retries: 2
<ul> <li>name: check-mail</li> <p></p></ul> schedule: "/15 " command: "openclaw mail:fetch" timeout: 60 </code></pre> <p>Отступы в YAML имеют значение. Если вдруг задача не запускается, первым делом проверьте, не съехал ли у вас пробел — классика жанра.</p> <h2>Синтаксис расписания</h2> <p>OpenClaw использует классический cron-формат:</p> <p><code>минута час день месяц день_недели</code></p> <p>Например, <code>0 9 </code> означает «каждый день в 9:00». Звёздочка — «любое значение», дробь — «каждые N единиц».</p> <ul> <li><code>0 9 </code> — каждый день в 9:00.</li> <li><code>/15 </code> — каждые 15 минут.</li> <li><code>0 3 0</code> — каждое воскресенье в 3:00 ночи.</li> <li><code>0 9-18 1-5</code> — каждый час с 9 до 18 по рабочим дням.</li> <li><code>@daily</code>, <code>@weekly</code>, <code>@hourly</code>, <code>@reboot</code> — специальные псевдонимы.</li> </ul> <p>Часовой пояс по умолчанию берётся от сервера. Если ваша аудитория живёт в другом поясе, укажите <code>TZ</code> в конфиге задачи или настройте сервер. Иначе «доброе утро» может прилетать в 4 ночи, и пользователи будут не в восторге.</p> <p>Если путаетесь в звёздочках, загляните в <a href="https://crontab.guru">crontab.guru</a> — там расписание переводят на человеческий язык.</p> <h2>Примеры задач, которые реально работают</h2> <h3>Ежедневный дайджест</h3> <p>Классика: сводка новостей, отчётов или событий уходит утром, пока пользователи пьют кофе.</p> <p><code>openclaw cron:add --name=daily-digest --schedule="0 9 " --command="openclaw digest:send --channel=email"</code></p> <p>Не планируйте рассылку на полночь, если только вы не хотите, чтобы люди получали письма вместе с ночными уведомлениями от такси.</p> <h3>Проверка почты</h3> <p>Если OpenClaw забирает письма из ящика и превращает их в тикеты, настройте проверку каждые 15 минут:</p> <p><code>openclaw cron:add --name=check-mail --schedule="/15 " --command="openclaw mail:fetch --mark-seen"</code></p> <p>Важно: команда должна быть идемпотентной. Если задача запустится дважды, одно и то же письмо не должно превратиться в два дублирующих тикета. Иначе ваша служба поддержки будет молиться о сбое cron.</p> <h3>Бэкапы</h3> <p>Резервное копирование лучше делать, когда все спят — и база данных тоже.</p> <p><code>openclaw cron:add --name=backup --schedule="0 3 " --command="openclaw backup:run --compress --store=s3"</code></p> <p>Подробнее про настройку хранилищ и проверку бэкапов читайте в разделе про <a href="https://vibe.egetech.ru/docs/openclaw/backups">резервное копирование</a>. И помните: бэкап, который вы не проверяли на восстановление, — это не бэкап, а ритуал успокоения нервов.</p> <h3>Уведомления и напоминания</h3> <p>Например, два пинга в рабочие дни: утром и после обеда.</p> <p><code>openclaw cron:add --name=standup-reminder --schedule="0 9,14 * 1-5" --command="openclaw notify:send --template=standup"</code></p> <p>Не добавляйте в cron спам по выходным. Пользователи это запомнят. И нет, это не «повышение вовлечённости».</p> <h2>Отладка и мониторинг</h2> <p>Cron-задачи имеют досадную особенность: они падают тихо, ночью, когда никто не смотрит. Поэтому мониторинг нужен обязательно.</p> <ul> <li><code>openclaw cron:run <name> --dry-run</code> — проверьте задачу вручную без побочных эффектов.</li> <li><code>openclaw logs --task=<name></code> — посмотрите, что произошло во время последнего запуска.</li> <li>Метрики по адресу <code>/metrics/cron</code> покажут, сколько задач выполнено и сколько упало.</li> <li>Настройте алерты: пусть OpenClaw шлёт уведомление, если задача не отработала. Для этого как раз подойдёт <a href="https://vibe.egetech.ru/docs/openclaw/heartbeat">heartbeat</a> или отдельная cron-задача-проверяльщика.</li> </ul> <p>Если задача упала в 3 ночи, а вы узнали об этом от пользователя в 11 утра — что-то пошло не так. Лучше узнавать о проблемах раньше, чем о них начинают писать в чат.</p> <h2>Краткий чек-лист хорошего cron</h2> <ul> <li>Делайте команды идемпотентными. Повторный запуск не должен ломать данные.</li> <li>Всегда указывайте <code>timeout</code>. Зависшая задача не должна висеть вечно.</li> <li>Настройте политику concurrency, чтобы долгая задача не запускалась повторно, пока не завершилась.</li> <li>Распределяйте нагрузку: не ставьте все задачи на 00:00, иначе сервер вздрогнет.</li> <li>Храните конфиг в репозитории. История изменений расписания спасёт, когда кто-то случайно удалит бэкап.</li> <li>Тестируйте задачи на стейдже. Продакшен — плохое место для первого запуска.</li> </ul> <h2>Итог</h2> <p>Встроенный cron в OpenClaw — это удобный способ автоматизировать рутину: дайджесты, проверку почты, бэкапы и напоминания. Добавляйте задачи через <a href="https://vibe.egetech.ru/docs/openclaw/cli">CLI</a> или конфиг, пишите понятные cron-выражения и не забывайте следить за выполнением. Главное — не путать cron с heartbeat: один будит по расписанию, другой проверяет пульс. Используйте каждого по назначению, и пусть сервер работает за вас, а не наоборот.</p>
Теги: Контекст