Выражение 0 9 * * *
09 * * * — самое популярное cron-выражение для ежедневных бизнес-задач. Запускается ровно в 9:00 каждого дня (включая выходные). Простое, читаемое, без подводных камней.
Разбор по полям:
- 0 — минута: 0 (ровно в начале часа).
- 9 — час: 9 (9:00 утра).
- * — день месяца: любой (1-31).
- * — месяц: любой (1-12).
- * — день недели: любой (0-7, включая выходные).
Если нужно «9:00 ТОЛЬКО в будни» — используйте 0 9 * * 1-5 (поне-пятница).
Часовой пояс
Cron работает в timezone сервера. На VPS в облаке часто стоит UTC по умолчанию — это значит, что 0 9 * * * запустится в 9:00 UTC, что = 12:00 МСК (зимой) или 12:00 МСК (МСК не переводится с 2014). Для правильной работы:
- Установите глобальный TZ. В Linux:
timedatectl set-timezone Europe/Moscow. Перезапустите cron:systemctl restart cron. - Установите TZ для конкретного crontab. В начале crontab пользователя:
CRON_TZ=Europe/Moscow. Все задачи в этом crontab будут использовать МСК. - Используйте UTC и адаптируйте. Если сервер в UTC, для запуска в 9:00 МСК пишите
0 6 * * *(UTC+3). Простой подход для глобальных систем. - В Docker/Kubernetes. Установите TZ env переменную:
environment: TZ=Europe/Moscow. Также может потребоваться смонтировать/etc/localtime.
Each user has their own crontab, and commands in any given crontab will be executed as the user who owns the crontab. The default time zone is system local time, but can be overridden with TZ or CRON_TZ at the top of the crontab.— man crontab — TZ environment variable
Когда применять 0 9 * * *
- Утренняя email-рассылка. Дайджест новостей, обзор рынка, мотивационные письма. 9:00 — пользователи открывают почту в офисе.
- Ежедневные отчёты. Продажи за вчера, новые регистрации, активные пользователи. К 9:00 данные за вчерашний день полные.
- Обновление дашборда. KPI, метрики, статистика. Утром все смотрят результаты.
- Импорт данных. Из внешних систем (1С, ERP, банки) — данные за прошлый день готовы.
- Напоминания о встречах. Календарь дня сотрудника, расписание созвонов.
- Backup проверка. Если бэкап шёл ночью — в 9 утра проверяем что прошёл успешно, отправляем алерт админу если нет.
- Очистка старых данных. Логи старше 30 дней, временные файлы.
- Pull обновлений. Git pull из внешних репо, обновление справочников (курсы валют, прайсы).
Примеры под разные сценарии
- POSIX crontab specification. IEEE / Open Group. pubs.opengroup.org/onlinepubs/9699919799/utilities/crontab.html. 2018.
- man crontab 5 — GNU/Linux. Linux Documentation Project. man7.org/linux/man-pages/man5/crontab.5.html. 2024.
- CRON_TZ — handling timezones in cron. systemd / cronie. github.com/cronie-crond/cronie. 2024.
