Что такое cron задача и как она работает
Что проверяют
Знаете ли вы формат расписания и, главное, понимаете ли, что cron не гарантирует ничего, кроме попытки запуска в срок. Go-разработчика обычно спрашивают в контексте выбора: планировщик внутри сервиса, системный демон или задание в оркестраторе.
Как отвечать
Cron это демон, который раз в минуту сверяет текущее время с таблицей заданий и запускает совпавшие команды. Строка таблицы это пять полей и команда: минута, час, день месяца, месяц, день недели.
0 5 * * * ежедневно в пять утра
*/15 * * * * каждые пятнадцать минут
0 3 1 * * первого числа в три часа ночиВ Go есть два пути. Внешний cron или задание в оркестраторе запускает бинарник как разовый процесс: код проще, логи и перезапуски отдаёт платформа. Внутренний планировщик на библиотеке вроде robfig/cron держит расписание в самом сервисе, умеет поле секунд и удобен, когда расписание меняется конфигурацией.
Сильный ответ сразу называет требования к заданию: идемпотентность, потому что повтор случится; ограничение по времени через контекст с таймаутом; запрет перекрытия запусков; запись результата, чтобы молчаливый сбой стал видимым.
Где спотыкаются
Считают запуск гарантированным. Машина была выключена, задание не выполнится и не догонится, а в нескольких репликах сервиса внутренний планировщик сработает в каждой, поэтому нужна блокировка в базе или выделенный экземпляр.
Пишут скрипт, который работает в терминале и молчит под cron. Окружение у демона своё: короткий PATH, нет переменных из профиля, рабочий каталог другой. Лечится абсолютными путями и явной загрузкой конфигурации.
Путают поля дня. Если заданы и день месяца, и день недели, классический cron запускает задание по совпадению любого из них, а не обоих; отсюда рассылки, которые вместо одного раза в месяц приходят каждую пятницу.