CodeKitHub
Instrumente pentru cod

Generator de Expresii Cron

Ultima actualizare:

O expresie cron este un șir cu cinci câmpuri (minut, oră, zi a lunii, lună, zi a săptămânii) care spune unui planificator precum Unix cron, crontab sau un pipeline CI/CD exact când să ruleze o sarcină — de exemplu `*/15 9-17 * * MON-FRI` înseamnă "la fiecare 15 minute, între 9 și 17, de luni până vineri". Acest instrument funcționează în ambele sensuri: construiește o programare folosind meniuri derulante simple și obții șirul cron, sau lipește o expresie cron existentă și vezi instant o traducere în limbaj clar plus următoarele 5 momente la care va rula efectiv. Urmează sintaxa standard cron POSIX/Vixie cu 5 câmpuri, folosită de Unix, Linux crontab și majoritatea planificatorilor de sarcini — vezi pagina de manual crontab(5) pentru specificația canonică. Totul rulează local în browser; nimic din ce scrii nu e încărcat nicăieri.

Description
Next 5 runs
    Builder
    Minute
    Hour
    Day of month
    Month
    Day of week
    Syntax legend
    • * — any value
    • , — value list separator (e.g. 1,3,5)
    • - — range of values (e.g. 1-5)
    • / — step values (e.g. */15 = every 15)

    Ce este acest instrument?

    O expresie cron este un șir compact de programare cu cinci câmpuri — `minut oră zi-a-lunii lună zi-a-săptămânii` — folosit de demonul Unix `cron` și practic de fiecare planificator de sarcini modelat după el (crontab, Kubernetes CronJobs, `schedule:` din GitHub Actions, Airflow, Jenkins). Fiecare câmp acceptă un asterisc (`*`, însemnând "orice valoare"), un număr specific, o listă separată prin virgulă (`1,15,30`), un interval (`9-17`), un pas (`*/15`, însemnând "la fiecare 15 unități") sau — pentru lună și zi a săptămânii — un nume de trei litere (`JAN`, `MON`) în loc de un număr.

    Definiția canonică a acestei sintaxe este pagina de manual Linux crontab(5), care documentează exact aceleași cinci câmpuri, caractere speciale (`* , - /`) și cele opt prescurtări `@` (`@reboot`, `@yearly`/`@annually`, `@monthly`, `@weekly`, `@daily`/`@midnight`, `@hourly`) pe care majoritatea implementărilor cron, inclusiv Vixie cron (versiunea inclusă pe majoritatea distribuțiilor Linux), le suportă ca alias pentru programări comune.

    Acest instrument implementează exact acel format standard cu 5 câmpuri — formatul pe care l-ai pune direct în `crontab -e` pe un server Linux sau macOS, sau în câmpul `schedule:` al unui Kubernetes CronJob. Nu implementează sintaxa Quartz cron, care e un format diferit, cu 6 sau 7 câmpuri, folosit de Quartz Scheduler din Java și de unele instrumente ale furnizorilor (vezi secțiunea de comparație de mai jos pentru când ai nevoie de aceasta).

    De ce să-l folosești?

    • Tocmai ai moștenit un crontab de producție cu o linie precum `17 3 * * 0` și fără niciun comentariu care să o explice — lipește-o aici înainte de a atinge orice, ca să vezi că înseamnă de fapt "în fiecare duminică la 3:17", nu o greșeală de tastare.
    • Scrii un workflow GitHub Actions cu un declanșator cron `schedule:` și tot te întrebi dacă `0 */6 * * *` chiar înseamnă la fiecare 6 ore, începând de la miezul nopții — verifică următoarele 5 execuții pentru a confirma înainte de a comite YAML-ul.
    • Ai configurat o sarcină cron cu atât o restricție de zi a lunii cât și de zi a săptămânii, precum `0 4 8 * MON`, iar sarcina rulează în zile pe care nu le așteptai — acest instrument scoate în evidență comportamentul de reuniune (SAU, nu ȘI) care păcălește aproape pe toată lumea prima dată.
    • Construiești un Kubernetes CronJob și ai nevoie de șirul exact `schedule:` pentru "la fiecare 15 minute, doar în orele de lucru, în zilele lucrătoare" fără să numeri câmpurile manual — folosește constructorul cu meniuri derulante în loc să scrii de mână.
    • Nu ești sigur dacă o configurație de planificator folosește cron standard sau Quartz cron, deoarece documentația spune doar "expresie cron" — verifică dacă are 5 câmpuri (acest instrument) sau 6-7 câmpuri cu caractere `?`/`L`/`W`/`#` (Quartz) înainte de a pierde timp depanând o nepotrivire de format.
    • 100% pe partea de client: logica programării tale nu părăsește niciodată browserul.

    Cum se folosește

    1. Pentru a traduce o expresie: scrie sau lipește un șir cron cu 5 câmpuri (sau o prescurtare @ precum `@daily`) în câmpul de intrare.
    2. Citește descrierea în limbaj clar și următoarele 5 execuții calculate afișate mai jos — ambele se actualizează live pe măsură ce scrii.
    3. Pentru a construi una: deschide secțiunea Constructor, alege un mod (fiecare / la fiecare N / valoare specifică) pentru fiecare din cele cinci câmpuri, și apasă "Generează expresia".
    4. Expresia generată completează câmpul de intrare de mai sus și alimentează imediat panourile de descriere și de execuții următoare.
    5. Folosește legenda de sintaxă din partea de jos ca referință rapidă pentru `*`, `,`, `-` și `/`.
    6. Copiază expresia finală cu butonul Copiază și lipește-o în crontab-ul, configurația CI sau planificatorul tău.

    Exemplu

    Intrare

    */15 9-17 * * MON-FRI

    Rezultat

    La 09:00, 09:15, 09:30, 09:45, 10:00 ... 17:45, luni, marți, miercuri, joi, vineri

    Această expresie rulează la fiecare 15 minute, dar doar în intervalul orar 09:00–17:59, și doar în zilele lucrătoare — o programare tipică de tip "ore de lucru" pentru interogare periodică.

    Cron standard vs Quartz cron

    "Sintaxa cron" nu e un singur standard universal — cele două formate pe care le vei întâlni cel mai des diferă în numărul de câmpuri și în ce înseamnă câteva caractere speciale. Folosește acest tabel pentru a confirma că folosești varianta potrivită pentru planificatorul tău țintă.

    AspectCron standard (acest instrument)Quartz cron
    Număr de câmpuri5 (minut oră zi-lunii lună zi-săpt)6 sau 7 (adaugă secunde și opțional anul)
    Folosit deLinux/macOS crontab, Kubernetes CronJob, GitHub ActionsJava Quartz Scheduler, unii planificatori enterprise
    Zi a lunii + zi a săptămânii ambele setateSe potrivește ORICARE (reuniune/SAU)Necesită `?` într-unul din cele două câmpuri — nu poți seta ambele simultan la o valoare
    Caractere speciale suplimentareNiciunul în afară de `* , - /`Adaugă `?`, `L` (ultima), `W` (cea mai apropiată zi lucrătoare), `#` (a n-a zi a săptămânii din lună)
    Programare la nivel de secundeNesuportatăSuportată (primul câmp)

    Rețete comune de programare

    Câteva expresii acoperă majoritatea nevoilor reale de programare — merită recunoscute din prima vedere, nu re-derivate de fiecare dată.

    • `*/5 * * * *` — la fiecare 5 minute, toată ziua. Comună pentru verificări de stare (health checks) și interogări ușoare.
    • `0 */6 * * *` — la fiecare 6 ore, la ora fixă (00:00, 06:00, 12:00, 18:00). O valoare implicită frecventă pentru sincronizare periodică sau sarcini de curățenie.
    • `0 2 * * *` — o dată pe zi, la ora 2 dimineața. Slotul clasic pentru backup-uri nocturne, când traficul e cel mai mic.
    • `0 9 * * 1-5` — la ora 9, doar de luni până vineri. Standard pentru rapoarte sau rezumate valabile doar în orele de lucru.
    • `0 0 1 * *` — miezul nopții pe data de 1 a fiecărei luni, echivalent cu prescurtarea `@monthly`. Folosit pentru rulări de facturare lunară sau resetări de utilizare.
    • `*/15 9-17 * * MON-FRI` — la fiecare 15 minute, dar doar în orele de lucru din zilele lucrătoare — combină un pas, un interval și un interval de zile ale săptămânii într-o singură expresie.

    Instrumente similare

    Lucrezi cu configurații, programări sau timestamp-uri? Aceste instrumente se combină bine cu generatorul cron.

    → Convertor de Timestamp · Convertor de Ceas Mondial · Calculator de Date

    Întrebări frecvente

    Ce este o expresie cron?

    O expresie cron e un șir de text cu 5 câmpuri (`minut oră zi-a-lunii lună zi-a-săptămânii`) care specifică o programare recurentă pentru demonul Unix `cron` și planificatori compatibili. Fiecare câmp poate fi `*` (orice valoare), un număr, o listă separată prin virgulă, un interval (`a-b`) sau un pas (`*/n`); câmpurile pentru lună și zi a săptămânii acceptă și nume de trei litere precum `JAN` sau `MON`. Specificația completă e documentată în pagina de manual crontab(5).

    Ce se întâmplă când atât ziua lunii cât și ziua săptămânii sunt restricționate?

    Aceasta e o capcană cron binecunoscută: conform semanticii POSIX cron, când AMBELE câmpuri — ziua lunii și ziua săptămânii — sunt restricționate (nu `*`), o sarcină rulează dacă ORICARE dintre condiții e îndeplinită — e o reuniune (SAU), nu o intersecție (ȘI). De exemplu, `0 4 8 * MON` rulează la ora 4 dimineața atât pe data de 8 a fiecărei luni CÂT ȘI în fiecare luni, nu doar în lunile care cad pe data de 8. Acest instrument implementează exact acel comportament de reuniune la calcularea execuțiilor următoare.

    Cron standard vs Quartz cron — de care am nevoie?

    Acest instrument generează sintaxa standard cron POSIX/Vixie cu 5 câmpuri — formatul folosit de `crontab` din Linux/macOS, Kubernetes CronJobs, `schedule:` din GitHub Actions și majoritatea executorilor de sarcini derivați din Unix. Quartz cron, folosit de Quartz Scheduler din Java și de instrumente construite pe el (unii planificatori enterprise, configurații Spring Batch mai vechi), e un format diferit cu 6 sau 7 câmpuri care adaugă un câmp inițial pentru secunde și schimbă înțelesul unor caractere speciale (`?` pentru "nicio valoare specifică" în câmpurile de zi, `L`/`W`/`#` pentru "ultima zi", "cea mai apropiată zi lucrătoare" și "a n-a zi a săptămânii din lună"). Dacă numărul de câmpuri al planificatorului tău e 6 sau 7, sau documentația menționează `?`, `L`, `W` sau `#`, ai nevoie de un instrument specific Quartz — expresiile din acest generator nu se vor interpreta corect acolo. Dacă sunt exact 5 câmpuri (sau o prescurtare stil `@daily`), ești la locul potrivit.

    Ce înseamnă prescurtările @yearly, @monthly, @weekly, @daily și @hourly?

    Acestea sunt șiruri prescurtate nestandard, dar larg suportate, care se extind în expresii comune cu 5 câmpuri: `@yearly`/`@annually` = `0 0 1 1 *` (o dată pe an, 1 ianuarie la miezul nopții), `@monthly` = `0 0 1 * *` (pe 1 a fiecărei luni la miezul nopții), `@weekly` = `0 0 * * 0` (în fiecare duminică la miezul nopții), `@daily`/`@midnight` = `0 0 * * *` (în fiecare zi la miezul nopții), `@hourly` = `0 * * * *` (la începutul fiecărei ore). Acest instrument le interpretează pe toate și le tratează exact ca echivalentul lor extins cu 5 câmpuri.

    Pot folosi nume de zi/lună în loc de numere?

    Da. Câmpul de lună acceptă nume de trei litere de la `JAN` la `DEC`, iar câmpul de zi a săptămânii acceptă de la `SUN` la `SAT` (fără a ține cont de majuscule), interschimbabile cu numerele. Numerele de zi a săptămânii merg de la 0 la 6, cu 0 = duminică; unele implementări acceptă și 7 pentru duminică, ceea ce acest instrument normalizează la 0. Intervalele și listele funcționează și cu nume, de ex. `MON-FRI` sau `JAN,JUN,DEC`.

    Expresia mea cron e trimisă către un server?

    Nu. Interpretarea, descrierea în limbaj clar și calcularea următoarelor execuții au loc toate local, în JavaScript, în browserul tău. Nimic din ce scrii sau generezi nu părăsește vreodată dispozitivul tău.

    În ce fus orar sunt calculate următoarele execuții?

    Acest instrument calculează următoarele execuții folosind fusul orar local al browserului tău, deoarece cron standard în sine nu are un câmp de fus orar încorporat — demonul sau planificatorul real care rulează sarcina ta folosește orice fus orar are configurat sistemul gazdă (sau, pentru GitHub Actions și planificatori cloud similari, UTC). Dacă fusul orar al serverului tău diferă de cel al browserului, ajustează mental orele afișate, sau verifică separat configurația de fus orar a planificatorului tău.

    Cum programez o sarcină să ruleze doar în ultima zi a lunii?

    Cron standard cu 5 câmpuri nu are o sintaxă directă pentru "ultima zi a lunii" — aceasta e una dintre funcțiile pe care Quartz cron le adaugă cu caracterul `L`. În cron standard, soluția obișnuită e programarea sarcinii pentru zilele 28-31 în fiecare zi (`0 0 28-31 * *`) și verificarea de către scriptul însuși dacă data de mâine trece într-o lună nouă, înainte de a-și rula efectiv logica.

    Pot programa ceva să ruleze la un interval neobișnuit, precum la fiecare 10 minute?

    Da, folosind sintaxa de pas: `*/10 * * * *` rulează la fiecare 10 minute, începând de la :00 (deci la :00, :10, :20, :30, :40, :50). Ține minte că pașii încep mereu numărătoarea de la valoarea minimă a câmpului, deci `*/10` în câmpul de minut nu va cădea niciodată pe :05 sau :15 — dacă ai nevoie de un decalaj de acest fel, folosește în schimb o listă explicită separată prin virgulă, de ex. `5,15,25,35,45,55`.

    De ce sarcina mea cron pare să ruleze de două ori deodată, sau deloc, în jurul unei schimbări de oră de vară/iarnă?

    Cron standard programează în funcție de ora afișată pe ceas pe sistemul gazdă, iar tranzițiile DST creează fie o oră sărită (primăvara), fie o oră repetată (toamna). O sarcină programată în ora sărită sau repetată poate rula de zero sau de două ori în acea zi, în funcție de gestionarea specifică a demonului tău cron. Rularea sarcinilor critice de infrastructură pe servere setate pe UTC (care nu are DST) evită complet această problemă.

    Instrumente similare