Руководства по Cron
Руководства

Cron и часовые пояса: полное понимание

UTC сервера vs локальное время, указание TZ

Само cron-выражение не содержит информации о часовом поясе. Время, на которое указывает выражение, следует часовому поясу системы, где работает cron. Поэтому даже одно и то же 0 9 * * * будет выполняться в разное фактическое время в зависимости от часового пояса сервера.

У многих серверов и контейнеров часовой пояс по умолчанию — UTC. Корея (KST) — это UTC+9, поэтому если на UTC-сервере запланировать 0 0 * * * (полночь), задача фактически выполнится в 9 утра по корейскому времени. Ситуация, когда планируют, думая о локальном времени, и получают расхождение в 9 часов, встречается очень часто.

Некоторые реализации cron позволяют добавить в начало crontab строку вроде CRON_TZ=Asia/Seoul, чтобы выражение трактовалось в конкретном часовом поясе. В контейнерном окружении также используют настройку переменной среды TZ образа или /etc/localtime под нужный регион. Однако поддержка зависит от реализации, поэтому это нужно проверять.

В регионах с летним временем (DST) в день перевода часов вперёд или назад определённое время может пропускаться или появляться дважды, из-за чего задача, запланированная на это время, может быть пропущена или продублирована. Важные задачи лучше планировать по UTC, чтобы избежать таких проблем.

Практический совет: мыслите выражение в UTC и обязательно проверяйте реальный часовой пояс среды развёртывания. Кстати, следующие запуски, которые показывает инструмент на этом сайте, приведены в локальном часовом поясе вашего браузера, так что их удобно сопоставлять с часовым поясом сервера.

Ресурсы

Готовые расписания

Готовые рецепты для копирования

Шпаргалка по синтаксису

5 полей и специальные символы с первого взгляда

Макросы и псевдонимы

Сокращённые выражения вроде @daily

Руководства

Практические руководства, чтобы разобраться в cron и меньше ошибаться