DevOps и серверы
Конвертер расписаний
Одно расписание в пяти синтаксисах: Unix cron, Quartz, AWS EventBridge, Kubernetes CronJob и systemd OnCalendar. Различия между ними — не косметические, и инструмент честно предупреждает там, где точного перевода нет.
Пять полей: минуты, часы, день месяца, месяц, день недели. Понимает @daily, @hourly и другие сокращения.
Что это значит
Запуск в 10 значений ч, минуты 0, 15, 30, 45, 5 дней недели.
| Поле | Записано | Разворачивается в |
|---|---|---|
| Минуты | */15 | 0, 15, 30, 45 |
| Часы | 9-18 | 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 |
| День месяца | * | любое (1–31) |
| Месяц | * | любое (1–12) |
| День недели | 1-5 | 1, 2, 3, 4, 5 |
Unix cron (crontab)
*/15 9-18 * * 1-5
Пять полей: минуты, часы, день месяца, месяц, день недели. Воскресенье — 0 или 7.
Quartz (Java, Spring @Scheduled)
0 */15 9-18 ? * 2-6 *
Семь полей: секунды впереди, год в конце. Дни недели считаются с единицы (вс = 1).
AWS EventBridge
cron(*/15 9-18 ? * 2-6 *)
Время всегда UTC. Одно из полей дня обязано быть «?».
Kubernetes CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
name: my-job
spec:
schedule: '*/15 9-18 * * 1-5'
timeZone: Europe/Moscow
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 1
jobTemplate:
spec:
backoffLimit: 2
template:
spec:
restartPolicy: OnFailure
containers:
- name: job
image: alpine:3.21
command:
- /bin/sh
- -c
- echo hello
Синтаксис тот же, что у cron. Поле timeZone работает с Kubernetes 1.27; без него расписание считается в часовом поясе kube-controller-manager.
systemd OnCalendar
Mon..Fri *-*-* 09..18:00/15:00
Проверить разбор: systemd-analyze calendar "<значение>" покажет ближайшие срабатывания.
Чем отличаются планировщики
| Планировщик | Полей | Воскресенье | Особенность |
|---|---|---|---|
| Unix cron | 5 | 0 или 7 | Если ограничены и день месяца, и день недели — срабатывает по ИЛИ. |
| Quartz | 6–7 | 1 | Секунды впереди, год в конце; одно из полей дня обязано быть «?». |
| AWS EventBridge | 6 | 1 | Всегда UTC, часовой пояс не задаётся. |
| Kubernetes CronJob | 5 | 0 или 7 | Пояс задаётся полем timeZone начиная с версии 1.27. |
| systemd OnCalendar | — | Sun | Формат «день недели дата время»; день месяца и день недели соединяются по И. |