Выражение для будней
Будни в cron — это дни недели 1-5 (пн-пт). Пятое поле cron-выражения — день недели от 0 (воскресенье) до 6 (суббота), плюс 7 как альтернативное воскресенье. Базовое выражение для буднего запуска: 0 9 * * 1-5.
Разбор:
- 0 — минута 0.
- 9 — час 9 (9:00).
- * — день месяца: любой.
- * — месяц: любой.
- 1-5 — день недели: понедельник (1) - пятница (5).
Запускается 5 раз в неделю × 52 недели = 260 раз в год (или 261 в високосный).
Полезные шаблоны
Дни недели в cron
Главный источник путаницы — нумерация дней недели. Правила:
- 0 = воскресенье (POSIX стандарт)
- 1 = понедельник
- 2 = вторник
- 3 = среда
- 4 = четверг
- 5 = пятница
- 6 = суббота
- 7 = воскресенье (для совместимости с Vixie cron, не во всех системах)
Также можно использовать буквенные сокращения: SUN, MON, TUE, WED, THU, FRI, SAT (на английском). Например: 0 9 * * MON-FRI = 0 9 * * 1-5. Не все cron-реализации поддерживают буквенный формат, для надёжности используйте цифры.
The day-of-week field uses 0 (zero) for Sunday. Some implementations also accept 7 for Sunday, but POSIX standard recommends 0. Note that ranges are inclusive: 1-5 means Monday through Friday.— POSIX cron specification, IEEE Std 1003.1
Праздники РФ
Cron не знает праздничные дни. Если 0 9 * * 1-5 запустится в рабочий день по календарю, но это праздник, задача всё равно сработает. В России официальные праздники:
- 1-8 января — Новогодние каникулы
- 23 февраля — День защитника Отечества
- 8 марта — Международный женский день
- 1 мая — Праздник Весны и Труда
- 9 мая — День Победы
- 12 июня — День России
- 4 ноября — День народного единства
Также возможны «переносные» дни (когда праздник попадает на выходной, рабочий день переносится на следующий понедельник). Это решает Производственный календарь от Минтруда РФ.
Решение: проверка в скрипте
#!/bin/bash
# Список праздников 2026 (формат YYYY-MM-DD)
HOLIDAYS=(
"2026-01-01" "2026-01-02" "2026-01-03" "2026-01-04"
"2026-01-05" "2026-01-06" "2026-01-07" "2026-01-08"
"2026-02-23" "2026-03-08" "2026-05-01" "2026-05-09"
"2026-06-12" "2026-11-04"
)
today=$(date +%Y-%m-%d)
for holiday in "${HOLIDAYS[@]}"; do
if [ "$today" = "$holiday" ]; then
echo "Today is a holiday, skipping job."
exit 0
fi
done
# Запуск рабочей логики
/path/to/your/job.shРешение: API производственного календаря
Для динамической проверки используйте API производственного календаря: https://isdayoff.ru/2026-05-01?cc=ru вернёт 1 если день выходной/праздник, 0 если рабочий. Бесплатно, не требует API ключа. В скрипте: если 1 — пропустить, если 0 — выполнить.
- POSIX crontab specification. IEEE / Open Group. pubs.opengroup.org/onlinepubs/9699919799/utilities/crontab.html. 2018.
- Производственный календарь РФ. КонсультантПлюс. consultant.ru/law/ref/calendar. 2026.
- isdayoff.ru API — определение рабочего дня. isdayoff.ru. isdayoff.ru. 2024.
