Изчисляване на следващите изпълнения на cron израз

анализира и показва следващите дати на изпълнение на cron конфигурация

Какво е cron израз?

Cron изразът е кратък низ, който описва повторение във времето. The форматът, наследен от Unix, съдържа пет полета, разделени с интервали: минута, час, ден от месеца, месец и ден от седмицата. Този синтаксис е роден с демона cron от Brian Kernighan през 1970 г., след това обобщен от Vixie cron (1987), поддържан от всички съвременни дистрибуции на Linux и macOS. Днес синтаксисът е същият намира се в повечето облачни планировчици (AWS EventBridge, GCP Cloud Scheduler, Azure Logic Приложения) и CI/CD (GitHub Actions, GitLab CI, Jenkins).

┌──── минута (0-59)
│ ┌── час (0-23)
│ │ ┌── ден от месеца (1-31)
│ │ │ ┌── месеца (1-12 или ЯН-ДЕК)
│ │ │ │ ┌── ден от седмицата (0-7 или НД-СБ, 0 и 7 = неделя)
│ │ │ │ │
* * * * *

Следователно добре оформен cron израз дефинира точен cron график: всяко поле може да бъде фиксирана стойност, диапазон, списък, стъпка или звездичка, която отговаря на всичко. Компактността на crontab израза е неговата сила, но това е и това, което го прави Cron декодер е от съществено значение за визуално валидиране на намерението. Това е целият смисъл на този конвертор на cron: създайте четливо обяснение на cron, плюс списъка с следващи екзекуции.

Анатомия на cron израз

Петте полета споделят обща граматика. Ето границите, приети от всяка колона на a Стандартен crontab израз:

  • Минута: 0-59.
  • Час: 0-23, 24-часов формат.
  • Ден от месеца: 1-31.
  • Месец: 1-12 или текстовите съкращения ЯНУАР, FEB, MAR, APR, MAY, JUNI, ЮЛИ, АВГ, СЕП, ОКС, НОЕ, DEC.
  • Ден от седмицата: 0-7 където 0 и 7 и двете представляват неделя или съкращенията SUN, MON, ВТО, СР, ЧЕТ, ПЕТ, СЪБ.

Специални знаци, споделяни от петте полета:

  • *: всяка стойност, съвпада с всички разрешени стойности в полето.
  • ,: отделен списък, например 1,15,30 в полето за минути.
  • -: включително диапазон, например 9-17 за работно време.
  • /: стъпка, например */15 = на всеки 15 единици, или 0-30/5 = на всеки 5 минути между 0 и 30.

Кварцови разширения (Java, AWS EventBridge, Spring): граматиката се увеличава до 6 или 7 полета с колона секунди в началото (0-59) и понякога колона Последна година (1970-2099). Quartz също въвежда ? (без конкретно стойност, за отделяне на ден от месеца и ден от седмицата), L (последен: последен ден от месеца, или миналия петък с 5L), W (най-близкия работен ден) и # (N-ти ден от седмицата на месеца, например 2#3 за 3-тия понеделник). Изражение Quartz обикновено не е съвместим с UNIX crontab и обратното: това е основният източник на грешка при копиране на cron израз от една платформа на друга.

# UNIX / Vixie cron (5 полета)
0 9 * * 1-5

# Кварц (6 полета със секунди)
0 0 9 ? * ПОН-ПЕТ

# Кварц (7 полета с година)
0 0 9 ? * ПОН-ПЕТ 2026

Защо да декодира cron израз?

Четенето на 0 0 * * * е бързо. Четенето на */7 2-5 1.15 * 1-5 е много по-малко. Кога израз е отвъд тривиалното, рискът от грешка в интерпретацията се увеличава и декодирането на cron се превръща в етап на преглед сам по себе си.

  • Производство за отстраняване на грешки: разберете защо дадена задача е била задействана в 03:17, а не в 03:00 или установете припокриване между две работни места.
  • Преглед на кода: потвърдете, че планировчикът, изпратен като заявка за изтегляне, прави това, което прави твърди авторът, без да се налага да запаметява семантиката на всеки символ.
  • Одит на Scheduler: Прегледайте Linux cron задания в /etc/crontab и /etc/cron.d/, тригери на Jenkins, spec.schedule на Kubernetes CronJob, правилата AWS EventBridge и GCP Cloud Scheduler задачи.
  • Наследена миграция: възобновете исторически /etc/crontab без документация и преизградете картата на задачите преди промяна на инфраструктурата.
  • Навлизане: позволете на нов разработчик да прочете отново crontab без да се налага да научавате всички специални знаци за една нощ.

Как да използвате cron декодер

Процедурата, която трябва да следвате, за да декодирате израз на crontab с инструмента:

  1. Поставете своя cron израз в полето за въвеждане (5 полета, разделени с интервали).
  2. Посочете броя на следващите изпълнения за изчисляване.
  3. Щракнете върху конвертиране, за да стартирате декодирането на cron: инструментът връща човешко изречение, което обяснява задействането, плюс датирания списък на следващите екзекуции.
  4. Проверете визуално дали датите отговарят на вашето намерение (час, ден, честота).
  5. Копирайте резултата чрез бутона за копиране, за да го поставите в билет, PR или документация технически.

Инструментът не само предоставя синтактичен анализ: той предоставя обяснение cronна естествен език, което го прави както декодер на cron, така и a валидатор на график.

Класически примери за cron израз

Моделите по-долу покриват повечето от cron графици, срещани в производството. Те всички са валидни за Linux crontab, Kubernetes CronJob, GitHub Actions и повечето програмисти за планиране на приложения.

Израз Човешко четене
* * * * * Всяка минута
0 * * * * Точно на всеки час
0 0 * * * Всеки ден в полунощ
0 0 * * 0 Всяка неделя в полунощ
*/15 * * * * На всеки 15 минути
0 9 * * 1-5 9:00 ч. от понеделник до петък
0 0 1 * * На 1-во число на всеки месец в полунощ
0 0,12 * * * В полунощ и на обяд всеки ден
*/5 9-17 * * 1-5 На всеки 5 минути през работното време
30 2 1,15 * * 1-ви и 15-ти от месеца в 2:30 ч.

За да изпълните cron задача на Linux сървър, редактирайте потребителския crontab от черупката:

# редактиране на crontab на текущия потребител
$ crontab -e

# списък на съществуващи задачи
$ crontab -l

# пример за добавен ред: ежедневно архивиране в 3 сутринта
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

Пример за извеждане на cron конвертор за */5 * * * *:

2026-05-05 00:00:00
2026-05-05 00:05:00
2026-05-05 00:10:00
2026-05-05 00:15:00
2026-05-05 00:20:00
...

Често задавани въпроси относно cron декодера

Каква е разликата между UNIX cron и Quartz?

UNIX/Vixie cron използва 5 полета (минута до ден от седмицата), без точност до секундата и няма родната представа за „последния ден от месеца“. Quartz (Java, Spring, AWS EventBridge) добавя колона секунди в горната част, понякога колона година в долната част и няколко символа (?, L, W, #) липсва в Linux crontab. А Следователно cron express Quartz с 6 полета не е директно преносим към /etc/crontab и обратно. Нашият декодер на cron е насочен към формата 5 полета, което обхваща повечето плановици.

Как да стартирате cron задача на всеки 5 минути?

Със стъпката / в полето за минути:

*/5 * * * * /usr/local/bin/check-health.sh

Този crontab израз задейства скрипта на минути 0, 5, 10, 15... от всяка час, всеки ден. За да ограничите работното време от понеделник до петък, добавете ограниченията в полетата за час и ден от седмицата: */5 9-17 * * 1-5.

Какво означава звездичката (*) в cron израз?

Звездицата означава която и да е стойност: съответства на всички разрешени стойности на полето. в 0 0 * * *, трите звезди означават „всеки ден от месеца, всеки месец, всеки ден от седмицата. В комбинация с първите две полета, зададени на 0, ние получава „всеки ден в полунощ“. Звездата може да се комбинира и със стъпка: */15 in минута = на всеки 15 минути.

Кронтаб има ли часова зона?

По подразбиране е часовата зона на сървъра. В Linux crontab това е системният TZ (често UTC на VPS и контейнери). GitHub Actions принуждава UTC. Kubernetes CronJob използва часова зона на контролера, конфигурируем чрез spec.timeZone от 1.27. AWS EventBridge оценява изразите по UTC. Планировчиците на приложения (Symfony Scheduler, Quartz, Airflow) често ви позволяват да зададете a часова зона, предназначена за всяка задача. Ако се съмнявате, проверете date на целевия сървър и сравнете с изхода на конвертора на cron.

Cron задача срещу команда: коя да изберете?

cron се използва за изпълнение на повтаряща се задача според график. Използва се at за изпълнение на команда само веднъж в даден момент. За ежедневно архивиране, ротация на журнала или редовно извикване на API, използвайте cron. За отлагане на една операция („рестартирайте това внедряване в 22:00 тази вечер“), използвайте на:

$ echo "/usr/local/bin/deploy.sh" | в 22:00
Как да тествам cron израз, без да го задействам?

Точно това е ролята на този конвертор на cron: той изчислява следващия N изпълнения от текущото време, без да стартира никаква работа. Веднага виждате дали вашият crontab израз се задейства в 03:00 както се очаква или 03:17 случайно. Да отидеш по-нататък далеч преди да инсталирате задачата, можете също да тествате скрипта самостоятелно (bash -x script.sh) и проверете синтаксиса на crontab файл с crontab -T файл на дистрибуции които го подкрепят.

Какво се случва, ако са зададени и ден от месеца, и ден от седмицата?

На Vixie cron (Linux) правилото е логично ИЛИ: заданието се задейства, ако един или друготото от двете полета съвпада. Това не е интуитивно и е източник на грешки. Кварцът използва a И, оттук и въвеждането на символа ? за изрично указване на „не като общо правило фиксирайте само едно от двете полета.

Пример за заявка

curl -X POST https://cdrn.fr/api/v1/tools/cron-converter/execute \
  -H "Content-Type: application/json" \
  -d '{"cron":"...","number_next_date":1}'

Входна схема

Поле Тип Задължително По подразбиране
cron string
number_next_date integer

Крайни точки

  • GET https://cdrn.fr/api/v1/tools - изброява всички достъпни инструменти
  • GET https://cdrn.fr/api/v1/tools/cron-converter - извлича схемата на този инструмент
  • POST https://cdrn.fr/api/v1/tools/cron-converter/execute - изпълнява този инструмент с JSON payload