0 0 28-31 * * Відкрити в парсері cron-виразів Рядок crontab використовує GNU date (date -d tomorrow); у macOS використовуйте date -v+1d. Quartz і Spring підтримують L напряму. У Kubernetes і GitHub Actions додайте ту саму перевірку дати на початок завдання.
Розбір за полями
| Поле | Значення | Відповідає |
|---|---|---|
| Хвилина | 0 | 0 |
| Година | 0 | 0 |
| День місяця | 28-31 | 28, 29, 30, 31 |
| Місяць | * | Будь-яке значення |
| День тижня | * | Будь-яке значення |
Найближчі запуски
Приклад: перші 6 запусків після 1 січня 2026 р. (UTC).
- сб, 31 січ. 2026 р., 00:00
- сб, 28 лют. 2026 р., 00:00
- вт, 31 бер. 2026 р., 00:00
- чт, 30 квіт. 2026 р., 00:00
- нд, 31 трав. 2026 р., 00:00
- вт, 30 черв. 2026 р., 00:00
Готові варіанти
0 0 28-31 * * [ "$(date -d tomorrow +\%d)" = 01 ] && /path/to/command Додайте рядок через crontab -e. Завдання виконується в часовому поясі сервера, якщо не задано CRON_TZ або TZ.
apiVersion: batch/v1
kind: CronJob
metadata:
name: last-day-of-month
spec:
schedule: "0 0 28-31 * *"
timeZone: "Etc/UTC"
concurrencyPolicy: Forbid
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: job
image: busybox:1.36
command: ["/bin/sh", "-c", "date; echo run"] Задайте spec.timeZone (Kubernetes 1.27+); без нього розклад іде за часовим поясом controller manager, зазвичай UTC.
on:
schedule:
- cron: '0 0 28-31 * *'
workflow_dispatch: GitHub Actions завжди використовує UTC, приймає інтервали від 5 хвилин і під навантаженням може запускати завдання із запізненням.
0 0 0 L * ? У Quartz секунди стоять першими, а в дні місяця чи дні тижня потрібен знак ?. Дні тижня мають номери 1–7 від неділі, тож надійніше писати назви.
@Scheduled(cron = "0 0 0 L * *") Spring @Scheduled(cron = …) приймає шість полів: секунди, а потім звичайні п’ять.
Часті запитання
› Чому в crontab % екранують як \%?
У рядку crontab % означає перехід на новий рядок (вхід для команди). Пишіть \%, щоб формат дати дійшов до shell без змін.
› У якому часовому поясі виконується 0 0 28-31 * *?
Cron використовує часовий пояс машини чи сервісу, що його запускає. У Linux це системний пояс, якщо не задано CRON_TZ або TZ; CronJob у Kubernetes підтримує spec.timeZone; GitHub Actions завжди працює в UTC.
› Як перевірити розклад перед розгортанням?
Відкрийте 0 0 28-31 * * у парсері cron-виразів на цьому сайті. Він пояснить кожне поле й покаже найближчі запуски за місцевим часом або в UTC просто в браузері.