Перейти к содержимому
ГоМастер

Поиск по урокам

Найдите урок, курс, термин или раздел

Cron ~9 часов 25 уроковпрактика

Cron в Go: фоновые и периодические задачи на robfig/cron

У каждого сервиса рано или поздно появляется работа «по расписанию»: ночной отчёт, чистка сессий, напоминания, синхронизация с внешним API. В Go за это отвечает robfig/cron — де-факто стандартный планировщик с синтаксисом классического cron: пять полей, секунды по желанию, часовые пояса из коробки.

Курс ведёт от первого тика до боевого планировщика: выражения и спецсимволы, задачи-функции и задачи-структуры, Start и Stop, контекст и отмена, перекрытие запусков и wrappers Recover, DelayIfStillRunning, SkipIfStillRunning. Отдельные уроки — про то, чего в учебниках нет: конкурентность задач, утечки горутин, логирование и метрики, корректный shutdown и блокировки при нескольких инстансах.

Планировщик и его задачи — обычный Go-код, значительная часть которого runnable в браузерной песочнице: эмуляция времени, состояния и очередей задач выполняется на интерпретаторе клиента, а связка с системным cron — локально.

Чему научитесь

Чему научитесь

  • Собирать планировщик на robfig/cron v3 и запускать задачи по расписанию
  • Читать и писать cron-выражения: пять полей, спецсимволы, @daily
  • Управлять жизненным циклом: Start, Stop, Entry, Remove
  • Держать часовые пояса и секундные расписания под контролем
  • Оберегать задачи: Recover, DelayIfStillRunning, SkipIfStillRunning
  • Останавливать планировщик без обрыва задач и без утечек горутин
  • Наблюдать за задачами: логи, метрики, распределённые блокировки

Для кого курс

  • Бэкенд-разработчикам, которым нужны задачи по расписанию в сервисе
  • Тем, кто до сих пор зовёт функции из внешнего crontab
  • Разработчикам ботов, отчётов и интеграций с периодическими работами

Что понадобится

  • Базовый синтаксис Go: функции, горутины, контекст (курс «Go с нуля»)
  • Знакомство с time.Duration и горутинами из курса по продвинутому Go

Программа курса: 25 уроков

  1. 1Знакомство с cron: фоновые задачи в GoЧто такое задача по расписанию и где живёт планировщик.~16 мин · golang cron, фоновые задачи go
  2. 2Установка robfig/cron и первый планировщикgo get, cron.New, AddFunc, Start: первый тик.~18 мин · robfig cron, установка cron golang
  3. 3Синтаксис cron-выражений: пять полейМинуты, часы, дни: читаем и пишем выражения.~20 мин · синтаксис cron, cron выражение
  4. 4Спецсимволы: звёздочка, слэш, диапазоны и @daily*/5, 1-10, запятые и дескрипторы @hourly и @daily.~18 мин · спецсимволы cron, @daily cron
  5. 5AddFunc: задачи на функцияхЗамыкания, параметры, что нельзя делать в AddFunc.~18 мин · cron addfunc, cron задача go
  6. 6AddJob: задачи-структуры и интерфейс JobМетод Run, зависимости через поля, тестирование задач.~18 мин · cron addjob, интерфейс job go
  7. 7Часовые пояса: Timezone и локальное времяcron.New с Location, задачи в другом городе, DST.~16 мин · cron timezone, часовой пояс cron
  8. 8Секунды: cron.NewWithSecondsШестипольный формат, когда секунды нужны и опасны.~16 мин · cron с секундами, newwithseconds
  9. 9Start, Stop и жизненный цикл планировщикаStart асинхронен, Stop ждёт задач, Entry.ID.~18 мин · cron start stop, остановка cron go
  10. 10Контекст в задачах: отмена и дедлайныПередаём контекст, отменяем долгие операции.~18 мин · cron context, отмена задачи go
  11. 11Долгие задачи: перекрытие запусковЧто происходит, если задача не уложилась в интервал.~18 мин · cron перекрытие задач, long running job go
  12. 12Горутины и конкурентность задачКаждый тик — горутина: гонки, мьютексы, очереди.~20 мин · cron конкурентность, горутины cron
  13. 13Инспекция расписания: Entries и RemoveEntry.ID, список задач, удаление на лету.~16 мин · cron entry, удаление задачи cron
  14. 14Хранение расписания: конфиг и базаВыражения из YAML и таблицы задач.~18 мин · cron из базы, динамическое расписание go
  15. 15Динамическое расписание: добавление на летуДобавление и замена задач без рестарта сервиса.~18 мин · cron динамический, изменение расписания go
  16. 16Wrappers: Recover, DelayIfStillRunning, SkipЦепочки обёрток, паники и повторные входы.~20 мин · cron wrappers, delayifstillrunning
  17. 17Логирование задач: zap и slog рядомСтруктурные логи запусков, ошибок и длительности.~16 мин · логирование cron, логи задач go
  18. 18Метрики задач: длительность и ошибкиCounterVec по статусам, Histogram длительности.~18 мин · метрики cron, мониторинг задач go
  19. 19Graceful shutdown планировщикаСигналы, Stop с дедлайном, дожим задач.~18 мин · graceful shutdown cron, остановка задач go
  20. 20Утечки горутин в задачахЗабытые тикеры, зависшие воркеры, detect по метрике.~18 мин · утечка горутин, goroutine leak go
  21. 21Несколько инстансов: блокировки задачRedis-замки, лидерство, идемпотентность задач.~20 мин · распределенный cron, блокировки задач go
  22. 22Тестирование задач без ожиданияВызов Run напрямую, фейковое расписание, время под контролем.~18 мин · тестирование cron, тесты задач go
  23. 23Ошибки в задачах: ретраи и алертыЭкспоненциальные повторы, журнал ошибок, эскалация.~18 мин · повтор задачи go, retry cron
  24. 24cron против time.Ticker и NewTimerКогда хватает тикера, а когда нужен планировщик.~16 мин · time ticker go, cron vs ticker
  25. 25Итоговый проект: планировщик отчётовНочные отчёты, очистка, напоминания: полный сервис задач.~24 мин · cron проект go, планировщик задач go

Вопросы о курсе

Чем robfig/cron лучше системного crontab?

Системный cron запускает процесс целиком и не знает о вашем приложении. robfig/cron живёт внутри программы: задачи делят с сервисом конфиги, БД и graceful shutdown, а расписание можно менять на лету.

Почему cron v3, а не v1?

В v3 появились секунды по запросу, часовые пояса, цепочки wrappers и инспекция задач Entry. Курс учит версии v3 — она обратно несовместима с v1 в мелочах, и это стоит знать при чтении старых статей.

Код запускается в браузерной песочнице?

Большинство задач курса — обычные функции, и они runnable в браузере: интерпретатор эмулирует время и состояние. Уроки про сигналы и системное окружение выполняются локально, интерфейс урока всегда это помечает.