На главную

DevOps и серверы

Конвертер расписаний

Одно расписание в пяти синтаксисах: Unix cron, Quartz, AWS EventBridge, Kubernetes CronJob и systemd OnCalendar. Различия между ними — не косметические, и инструмент честно предупреждает там, где точного перевода нет.

Пять полей: минуты, часы, день месяца, месяц, день недели. Понимает @daily, @hourly и другие сокращения.

Что это значит

Запуск в 10 значений ч, минуты 0, 15, 30, 45, 5 дней недели.

ПолеЗаписаноРазворачивается в
Минуты*/150, 15, 30, 45
Часы9-189, 10, 11, 12, 13, 14, 15, 16, 17, 18
День месяца*любое (1–31)
Месяц*любое (1–12)
День недели1-51, 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 cron50 или 7Если ограничены и день месяца, и день недели — срабатывает по ИЛИ.
Quartz6–71Секунды впереди, год в конце; одно из полей дня обязано быть «?».
AWS EventBridge61Всегда UTC, часовой пояс не задаётся.
Kubernetes CronJob50 или 7Пояс задаётся полем timeZone начиная с версии 1.27.
systemd OnCalendarSunФормат «день недели дата время»; день месяца и день недели соединяются по И.