Oblicz najbliższe wykonania wyrażenia cron
- Panel
- Dokumentacja
- API
Czym jest wyrażenie cron?
Wyrażenie cron to krótki ciąg, który opisuje rekurencję w czasie. Format
odziedziczony po Unix mieści się w pięciu polach oddzielonych spacjami: minuta, godzina,
dzień miesiąca, miesiąc i dzień tygodnia. Ta składnia narodziła się
wraz z demonem cron Briana Kernighana w latach 70., następnie została uogólniona przez
Vixie cron (1987), przejętego przez wszystkie nowoczesne dystrybucje Linux i macOS. Dziś
ta sama składnia występuje w większości schedulerów chmurowych (AWS EventBridge, GCP Cloud Scheduler,
Azure Logic Apps) i CI/CD (GitHub Actions, GitLab CI, Jenkins).
┌──── minute (0-59)
│ ┌── heure (0-23)
│ │ ┌── jour du mois (1-31)
│ │ │ ┌── mois (1-12 ou JAN-DEC)
│ │ │ │ ┌── jour de la semaine (0-7 ou SUN-SAT, 0 et 7 = dimanche)
│ │ │ │ │
* * * * *
Dobrze sformowane wyrażenie cron definiuje więc precyzyjny harmonogram cron: każde pole może być stałą wartością, zakresem, listą, krokiem lub gwiazdką, która pasuje do wszystkiego. Zwartość wyrażenia crontab to jego siła, ale to także sprawia, że dekoder cron jest niezbędny do wizualnej weryfikacji intencji. Taki jest cel tego konwertera cron: wyprodukować czytelne wyjaśnienie cron oraz listę kolejnych uruchomień.
Anatomia wyrażenia cron
Pięć pól dzieli wspólną gramatykę. Oto granice akceptowane przez każdą kolumnę standardowego wyrażenia crontab:
- Minuta:
0-59. - Godzina:
0-23, format 24h. - Dzień miesiąca:
1-31. - Miesiąc:
1-12lub tekstowe skrótyJAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC. - Dzień tygodnia:
0-7, gdzie0i7reprezentują niedzielę, lub skrótySUN,MON,TUE,WED,THU,FRI,SAT.
Znaki specjalne wspólne dla pięciu pól:
*: any value, pasuje do wszystkich dozwolonych wartości pola.,: dyskretna lista, na przykład1,15,30w polu minuta.-: zakres włączny, na przykład9-17dla godzin biurowych./: krok (step), na przykład*/15= co 15 jednostek, lub0-30/5= co 5 minut między 0 a 30.
Rozszerzenia Quartz (Java, AWS EventBridge, Spring): gramatyka rośnie do 6 lub 7
pól z kolumną sekundy na początku (0-59) i czasem kolumną
rok na końcu (1970-2099). Quartz wprowadza też ? (no specific
value, do oddzielenia dnia-miesiąca i dnia-tygodnia), L (last: ostatni dzień miesiąca
lub ostatni piątek z 5L), W (najbliższy dzień roboczy) i #
(N-ty dzień tygodnia miesiąca, na przykład 2#3 dla 3. poniedziałku). Wyrażenie Quartz
zwykle nie jest kompatybilne z crontab UNIX i odwrotnie: to główne źródło błędów przy kopiowaniu
wyrażenia cron między platformami.
# UNIX / Vixie cron (5 champs)
0 9 * * 1-5
# Quartz (6 champs avec secondes)
0 0 9 ? * MON-FRI
# Quartz (7 champs avec année)
0 0 9 ? * MON-FRI 2026
Dlaczego dekodować wyrażenie cron?
Czytanie 0 0 * * * jest szybkie. Czytanie */7 2-5 1,15 * 1-5 jest znacznie
mniej. Gdy wyrażenie wychodzi poza trywialne, ryzyko błędu interpretacji rośnie i cron decode
staje się pełnoprawnym etapem review.
- Debug produkcji: zrozumienie, dlaczego zadanie odpaliło o 3:17, a nie o 3:00, lub identyfikacja nakładania się dwóch zadań.
- Code review: zweryfikowanie, że scheduler zaproponowany w pull request rzeczywiście robi to, co twierdzi autor, bez zapamiętywania semantyki każdego symbolu.
- Audyt schedulerów: przegląd cron jobs Linux w
/etc/crontabi/etc/cron.d/, triggerów Jenkins,spec.schedulew Kubernetes CronJob, reguł AWS EventBridge i zadań GCP Cloud Scheduler. - Migracja legacy: przejęcie historycznego
/etc/crontabbez dokumentacji i odtworzenie mapy zadań przed zmianą infrastruktury. - Onboarding: umożliwienie nowemu programiście odczytania crontab bez konieczności nauki wszystkich znaków specjalnych z dnia na dzień.
Jak korzystać z dekodera cron
Procedura dekodowania wyrażenia crontab za pomocą narzędzia:
- Wklej swoje wyrażenie cron w polu wprowadzania (5 pól oddzielonych spacjami).
- Wskaż liczbę kolejnych uruchomień do obliczenia.
- Kliknij convert, aby uruchomić cron decode: narzędzie zwraca ludzkie zdanie wyjaśniające uruchomienie oraz datowaną listę kolejnych uruchomień.
- Wizualnie sprawdź, że daty odpowiadają twojej intencji (godzina, dzień, częstotliwość).
- Skopiuj wyjście przyciskiem kopiowania, aby wkleić je do zgłoszenia, PR lub dokumentacji technicznej.
Narzędzie nie zadowala się tylko parsowaniem składniowym: dostarcza wyjaśnienie cron w języku naturalnym, co czyni je jednocześnie dekoderem cron i walidatorem planowania.
Klasyczne przykłady wyrażeń cron
Poniższe wzorce pokrywają większość harmonogramów cron spotykanych w produkcji. Wszystkie są prawidłowe w Linux crontab, Kubernetes CronJob, GitHub Actions i większości schedulerów aplikacyjnych.
| Wyrażenie | Odczyt ludzki |
|---|---|
* * * * * |
Co minutę |
0 * * * * |
O każdej pełnej godzinie |
0 0 * * * |
Codziennie o północy |
0 0 * * 0 |
W każdą niedzielę o północy |
*/15 * * * * |
Co 15 minut |
0 9 * * 1-5 |
9:00 od poniedziałku do piątku |
0 0 1 * * |
1. każdego miesiąca o północy |
0 0,12 * * * |
O północy i w południe codziennie |
*/5 9-17 * * 1-5 |
Co 5 minut w godzinach pracy |
30 2 1,15 * * |
1. i 15. miesiąca o 2:30 |
Aby uruchomić zadanie cron na serwerze Linux, edytuje się crontab użytkownika z powłoki:
# éditer la crontab de l'utilisateur courant
$ crontab -e
# lister les tâches existantes
$ crontab -l
# exemple de ligne ajoutée : sauvegarde quotidienne à 3h
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Przykład wyjścia konwertera cron dla */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
...
Najczęściej zadawane pytania dotyczące dekodera cron
Jaka jest różnica między cron UNIX a Quartz?
UNIX/Vixie cron używa 5 pól (od minuty do dnia tygodnia), bez precyzji do sekundy i nie ma natywnego
pojęcia „ostatniego dnia miesiąca". Quartz (Java, Spring, AWS EventBridge) dodaje kolumnę
sekundy na początku, czasem kolumnę rok na końcu i kilka symboli
(?, L, W, #) nieobecnych w crontab Linux.
Wyrażenie cron Quartz z 6 polami nie jest więc bezpośrednio przenośne do
/etc/crontab, i odwrotnie. Nasz dekoder cron celuje w format z 5
polami, który pokrywa większość schedulerów.
Jak uruchomić zadanie cron co 5 minut?
Za pomocą kroku / w polu minuta:
*/5 * * * * /usr/local/bin/check-health.sh
To wyrażenie crontab wyzwala skrypt w minutach 0, 5, 10, 15... każdej godziny,
każdego dnia. Aby ograniczyć do godzin pracy od poniedziałku do piątku, dodaj ograniczenia na pola
godzina i dzień-tygodnia: */5 9-17 * * 1-5.
Co oznacza gwiazdka (*) w wyrażeniu cron?
Gwiazdka oznacza any value: pasuje do wszystkich dozwolonych wartości pola. W
0 0 * * * trzy gwiazdki oznaczają „dowolny dzień miesiąca, dowolny miesiąc, dowolny
dzień tygodnia". W połączeniu z dwoma pierwszymi polami ustawionymi na 0 otrzymujemy
„codziennie o północy". Gwiazdka może też być łączona z krokiem: */15 w minutach
= co 15 minut.
Czy crontab ma strefę czasową?
Domyślnie strefę serwera. W crontab Linux to systemowe TZ (często UTC na VPS i w kontenerach).
GitHub Actions wymusza UTC. Kubernetes CronJob używa strefy kontrolera, konfigurowalnej przez
spec.timeZone od 1.27. AWS EventBridge ocenia wyrażenia w UTC. Aplikacyjne
scheduler (Symfony Scheduler, Quartz, Airflow) często pozwalają ustawić dedykowaną strefę dla
każdego zadania. W razie wątpliwości sprawdź date na serwerze docelowym i porównaj
z wyjściem konwertera cron.
Cron job vs polecenie at: który wybrać?
cron służy do wykonywania zadania rekurencyjnego według harmonogramu.
at służy do wykonania polecenia jednorazowo w danym momencie. Do codziennej
kopii zapasowej, rotacji logów lub regularnego wywołania API użyj cron. Aby odroczyć jednorazową
operację („uruchom ponownie wdrożenie dziś wieczorem o 22"), użyj at:
$ echo "/usr/local/bin/deploy.sh" | at 22:00
Jak przetestować wyrażenie cron bez jego wyzwalania?
To dokładnie rola tego konwertera cron: oblicza N kolejnych uruchomień od
bieżącej chwili, bez uruchamiania żadnego zadania. Natychmiast widzisz, czy twoje
wyrażenie crontab odpala o 3:00 zgodnie z planem, czy o 3:17 przypadkowo.
Aby pójść dalej przed instalacją zadania, możesz też przetestować sam skrypt
(bash -x script.sh) i zweryfikować składnię pliku crontab za pomocą
crontab -T fichier w dystrybucjach, które to obsługują.
Co się dzieje, gdy dzień-miesiąca i dzień-tygodnia są oba ustawione?
W Vixie cron (Linux) regułą jest logiczne LUB: zadanie odpala, jeśli jedno z
dwóch pól pasuje. Jest to sprzeczne z intuicją i źródłem błędów. Quartz używa I, stąd
wprowadzenie symbolu ? do jawnego sygnalizowania „brak ograniczenia". Zazwyczaj
ustawiaj tylko jedno z dwóch pól.
Przykładowe zapytanie
curl -X POST https://cdrn.fr/api/v1/tools/cron-converter/execute \
-H "Content-Type: application/json" \
-d '{"cron":"...","number_next_date":1}'
Schemat wejściowy
| Pole | Typ | Wymagane | Domyślnie |
|---|---|---|---|
cron |
string | ✓ | – |
number_next_date |
integer | ✓ | – |
Punkty końcowe
GET https://cdrn.fr/api/v1/tools- lista wszystkich dostępnych narzędziGET https://cdrn.fr/api/v1/tools/cron-converter- zwraca schemat dla tego narzędziaPOST https://cdrn.fr/api/v1/tools/cron-converter/execute- uruchamia to narzędzie z payloadem JSON