DevToolPal
UK

Cron-вираз

Перший понеділок щомісяця

Завдання запускається о 09:00 з 1 по 7 число, а перевірка в shell залишає лише понеділок.

0 9 1-7 * * Відкрити в парсері cron-виразів

Запис 0 9 1-7 * 1 не працює: якщо задано обидва поля дня, cron спрацьовує за збігу будь-якого з них, тобто 1–7 числа й щопонеділка. Quartz і Spring підтримують MON#1.

Розбір за полями

Поле Значення Відповідає
Хвилина 0 0
Година 9 9
День місяця 1-7 1, 2, 3, 4, 5, 6, 7
Місяць * Будь-яке значення
День тижня * Будь-яке значення

Найближчі запуски

Приклад: перші 6 запусків після 1 січня 2026 р. (UTC).

  1. пн, 5 січ. 2026 р., 09:00
  2. пн, 2 лют. 2026 р., 09:00
  3. пн, 2 бер. 2026 р., 09:00
  4. пн, 6 квіт. 2026 р., 09:00
  5. пн, 4 трав. 2026 р., 09:00
  6. пн, 1 черв. 2026 р., 09:00

Готові варіанти

crontab
0 9 1-7 * * [ "$(date +\%u)" = 1 ] && /path/to/command

Додайте рядок через crontab -e. Завдання виконується в часовому поясі сервера, якщо не задано CRON_TZ або TZ.

Kubernetes CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
  name: first-monday-of-month
spec:
  schedule: "0 9 1-7 * *"
  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.

GitHub Actions
on:
  schedule:
    - cron: '0 9 1-7 * *'
  workflow_dispatch:

GitHub Actions завжди використовує UTC, приймає інтервали від 5 хвилин і під навантаженням може запускати завдання із запізненням.

Quartz
0 0 9 ? * MON#1

У Quartz секунди стоять першими, а в дні місяця чи дні тижня потрібен знак ?. Дні тижня мають номери 1–7 від неділі, тож надійніше писати назви.

Spring
@Scheduled(cron = "0 0 9 * * MON#1")

Spring @Scheduled(cron = …) приймає шість полів: секунди, а потім звичайні п’ять.

Часті запитання

› Чому 0 9 1-7 * 1 спрацьовує надто часто?

Коли обмежено і день місяця, і день тижня, cron поєднує їх через АБО, тож завдання запускається з 1 по 7 число та ще щопонеділка.

› У якому часовому поясі виконується 0 9 1-7 * *?

Cron використовує часовий пояс машини чи сервісу, що його запускає. У Linux це системний пояс, якщо не задано CRON_TZ або TZ; CronJob у Kubernetes підтримує spec.timeZone; GitHub Actions завжди працює в UTC.

› Як перевірити розклад перед розгортанням?

Відкрийте 0 9 1-7 * * у парсері cron-виразів на цьому сайті. Він пояснить кожне поле й покаже найближчі запуски за місцевим часом або в UTC просто в браузері.