Calcularea următoarelor execuții ale unei expresii cron
- Panou de control
- Documentație
- API
Ce este o expresie cron?
O expresie cron este un șir scurt care descrie o recurență în timp. Formatul
moștenit de la Unix se compune din cinci câmpuri separate prin spații: minut, oră,
zi din lună, lună și zi din săptămână. Această sintaxă s-a născut cu demonul
cron al lui Brian Kernighan în anii 1970, apoi generalizată de Vixie cron
(1987) preluat de toate distribuțiile Linux și macOS moderne. Astăzi, aceeași sintaxă se
regăsește în majoritatea planificatorilor cloud (AWS EventBridge, GCP Cloud Scheduler, Azure Logic
Apps) și CI/CD (GitHub Actions, GitLab CI, Jenkins).
┌──── minut (0-59)
│ ┌── oră (0-23)
│ │ ┌── zi din lună (1-31)
│ │ │ ┌── lună (1-12 sau JAN-DEC)
│ │ │ │ ┌── zi din săptămână (0-7 sau SUN-SAT, 0 și 7 = duminică)
│ │ │ │ │
* * * * *
O expresie cron bine formată definește deci un cron schedule precis: fiecare câmp poate fi o valoare fixă, un interval, o listă, un pas sau un asterisc care se potrivește la tot. Compactitatea expresiei crontab este forța sa, dar este de asemenea ceea ce face un cron decoder indispensabil pentru a valida vizual intenția. Acesta este întregul obiect al acestui cron converter: a produce o explicație cron lizibilă, plus lista următoarelor execuții.
Anatomia unei expresii cron
Cele cinci câmpuri împărtășesc o gramatică comună. Iată limitele acceptate de fiecare coloană a unei expresii crontab standard:
- Minut:
0-59. - Oră:
0-23, format 24h. - Zi din lună:
1-31. - Lună:
1-12sau abrevierile textualeJAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC. - Zi din săptămână:
0-7unde0și7reprezintă amândouă duminica, sau abrevierileSUN,MON,TUE,WED,THU,FRI,SAT.
Caractere speciale împărtășite de cele cinci câmpuri:
*: any value, se potrivește cu toate valorile autorizate ale câmpului.,: listă discretă, de exemplu1,15,30în câmpul minut.-: interval inclusiv, de exemplu9-17pentru orele de birou./: pas (step), de exemplu*/15= la fiecare 15 unități, sau0-30/5= la fiecare 5 minute între 0 și 30.
Extensii Quartz (Java, AWS EventBridge, Spring): gramatica urcă la 6 sau 7
câmpuri cu o coloană secunde în cap (0-59) și uneori o coloană
an în coadă (1970-2099). Quartz introduce de asemenea ? (no specific
value, pentru a decupla zi-din-lună și zi-din-săptămână), L (last: ultima zi a lunii,
sau ultima vineri cu 5L), W (zi lucrătoare cea mai apropiată) și #
(a N-a zi a săptămânii a lunii, de exemplu 2#3 pentru al 3-lea luni). O expresie
Quartz nu este în general compatibilă cu un crontab UNIX, și viceversa: este principala
sursă de eroare când copiezi o cron expression de la o platformă la alta. Decoder-ul
nostru vizează formatul cu 5 câmpuri, care acoperă majoritatea planificatorilor.
# UNIX / Vixie cron (5 câmpuri)
0 9 * * 1-5
# Quartz (6 câmpuri cu secunde)
0 0 9 ? * MON-FRI
# Quartz (7 câmpuri cu an)
0 0 9 ? * MON-FRI 2026
De ce să decodezi o expresie cron?
A citi 0 0 * * * este rapid. A citi */7 2-5 1,15 * 1-5 este net mai puțin. Când
o expresie iese din trivial, riscul de eroare de interpretare urcă și cron decode
devine o etapă de review în sine.
- Debug producție: a înțelege de ce o sarcină s-a declanșat la 03h17 și nu la 03h00, sau a identifica o suprapunere între două joburi.
- Code review: a valida că un planificator împins într-un pull request face într-adevăr ce pretinde autorul, fără a fi nevoie să memorezi semantica fiecărui simbol.
- Audit de planificatori: a trece în revistă cron job-urile Linux din
/etc/crontabși/etc/cron.d/, trigger-urile Jenkins,spec.schedule-urile Kubernetes CronJob, regulile AWS EventBridge și job-urile GCP Cloud Scheduler. - Migrare legacy: a relua un
/etc/crontabistoric fără documentație și a reconstrui cartografia sarcinilor înainte de o schimbare de infrastructură. - Onboarding: a permite unui nou dezvoltator să relucreze o crontab fără a fi nevoie să învețe toate caracterele speciale dintr-o zi pe alta.
Cum să utilizezi decoder-ul cron
Pașii de urmat pentru a decoda o expresie crontab cu instrumentul:
- Lipește cron expression-ul tău în câmpul de intrare (5 câmpuri separate prin spații).
- Indică numărul de execuții următoare de calculat.
- Apasă pe convert pentru a lansa cron decode-ul: instrumentul returnează o frază umană care explică declanșarea, plus lista datată a execuțiilor următoare.
- Verifică vizual că datele corespund intenției tale (oră, zi, frecvență).
- Copiază ieșirea prin butonul de copiere pentru a o lipi într-un tichet, un PR sau o documentație tehnică.
Instrumentul nu se mulțumește cu un parsing sintactic: furnizează o explicație cron în limbaj natural, ceea ce face din el atât un cron decoder cât și un validator de planificare.
Exemple clasice de cron expression
Pattern-urile de mai jos acoperă esențialul cron schedule-urilor întâlnite în producție. Sunt toate valide pe Linux crontab, Kubernetes CronJob, GitHub Actions și majoritatea planificatorilor aplicativi.
| Expresie | Citire umană |
|---|---|
* * * * * |
La fiecare minut |
0 * * * * |
În fiecare oră fix |
0 0 * * * |
În fiecare zi la miezul nopții |
0 0 * * 0 |
În fiecare duminică la miezul nopții |
*/15 * * * * |
La fiecare 15 minute |
0 9 * * 1-5 |
9h00 de luni până vineri |
0 0 1 * * |
Pe 1 a fiecărei luni la miezul nopții |
0 0,12 * * * |
La miezul nopții și prânz în fiecare zi |
*/5 9-17 * * 1-5 |
La fiecare 5 minute în orele lucrătoare |
30 2 1,15 * * |
Pe 1 și 15 a lunii la 2h30 |
Pentru a executa o sarcină cron pe un server Linux, se editează crontab-ul utilizator din shell:
# editare crontab al utilizatorului curent
$ crontab -e
# listare sarcinilor existente
$ crontab -l
# exemplu de linie adăugată: backup zilnic la 3h
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Exemplu de ieșire a cron converter-ului pentru */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
...
Întrebări frecvente despre cron decoder
Care este diferența între cron UNIX și Quartz?
UNIX/Vixie cron utilizează 5 câmpuri (minut până la zi-din-săptămână), fără precizie la secundă, și nu are
noțiunea nativă de "ultima zi a lunii". Quartz (Java, Spring, AWS EventBridge) adaugă o coloană
secunde în cap, uneori o coloană an în coadă, și mai multe simboluri
(?, L, W, #) absente din crontab-ul Linux. O
expresie cron Quartz cu 6 câmpuri nu este deci direct portabilă spre
/etc/crontab, și invers. Cron decoder-ul nostru vizează formatul cu 5
câmpuri, care acoperă majoritatea planificatorilor.
Cum să execut o sarcină cron la fiecare 5 minute?
Cu pasul / pe câmpul minut:
*/5 * * * * /usr/local/bin/check-health.sh
Această crontab expression declanșează scriptul la minutele 0, 5, 10, 15... ale fiecărei
ore, în fiecare zi. Pentru a limita la orele lucrătoare de luni până vineri, adaugă constrângerile
pe câmpurile oră și zi-din-săptămână: */5 9-17 * * 1-5.
Ce înseamnă asteriscul (*) într-o expresie cron?
Asteriscul înseamnă any value: se potrivește cu toate valorile autorizate ale câmpului. În
0 0 * * *, cele trei stele înseamnă "orice zi a lunii, orice
lună, orice zi a săptămânii". Combinat cu primele două câmpuri fixate la 0, se
obține "în fiecare zi la miezul nopții". Steaua se poate combina și cu un pas: */15 la
minut = la fiecare 15 minute.
Are crontab un fus orar?
Implicit, fusul serverului. Pe un crontab Linux, este TZ-ul sistem (adesea UTC pe VPS-uri și
containere). GitHub Actions forțează UTC. Kubernetes CronJob utilizează fusul controlerului,
configurabil prin spec.timeZone din 1.27. AWS EventBridge evaluează expresiile în
UTC. Planificatorii aplicativi (Symfony Scheduler, Quartz, Airflow) permit adesea fixarea unui
fus dedicat fiecărei sarcini. În caz de dubiu, verifică date pe serverul țintă și
compară cu ieșirea cron converter-ului.
Cron job vs comanda at: pe care să o aleg?
cron servește la executarea unei sarcini recurente conform unei planificări. at servește
la executarea unei comenzi o singură dată la un moment dat. Pentru un backup zilnic,
o rotație de log-uri sau un apel API regulat, utilizează cron. Pentru a amâna o operație unică
("relansează acest deploy la 22h în această seară"), utilizează at:
$ echo "/usr/local/bin/deploy.sh" | at 22:00
Cum să testez o expresie cron fără să o declanșez?
Este exact rolul acestui cron converter: calculează N următoarele
execuții din momentul curent, fără a porni vreun job. Vezi imediat dacă
crontab expression-ul tău trage la 03h00 cum este prevăzut sau la 03h17 din întâmplare. Pentru a merge mai
departe înainte de a instala sarcina, poți de asemenea testa scriptul singur (bash -x script.sh)
și a verifica sintaxa unui fișier crontab cu crontab -T fisier pe distribuțiile
care îl suportă.
Ce se întâmplă dacă zi-din-lună și zi-din-săptămână sunt amândouă fixate?
Pe Vixie cron (Linux), regula este un SAU logic: job-ul trage dacă unul sau
altul dintre cele două câmpuri se potrivește. Este contraintuitiv și sursă de bug-uri. Quartz utilizează un
ȘI, de unde introducerea simbolului ? pentru a semnala explicit "fără
constrângere". Ca regulă generală, fixează doar unul dintre cele două câmpuri.
Exemplu de cerere
curl -X POST https://cdrn.fr/api/v1/tools/cron-converter/execute \
-H "Content-Type: application/json" \
-d '{"cron":"...","number_next_date":1}'
Schema de intrare
| Câmp | Tip | Obligatoriu | Implicit |
|---|---|---|---|
cron |
string | ✓ | – |
number_next_date |
integer | ✓ | – |
Puncte de acces
GET https://cdrn.fr/api/v1/tools- listează toate instrumentele disponibileGET https://cdrn.fr/api/v1/tools/cron-converter- obține schema acestui instrumentPOST https://cdrn.fr/api/v1/tools/cron-converter/execute- execută acest instrument cu un payload JSON