Construirea unei expresii cron
- Panou de control
- Documentație
- API
De ce un cron builder vizual?
O expresie cron ține în cinci câmpuri și rămâne totuși una dintre cele mai generatoare de
bug-uri în producție. De câte ori un dezvoltator a scris 0 0 * * 1 gândindu-se "în fiecare
luni", fără să-și amintească că 1 poate semnifica duminică în funcție de implementări? De câte
ori a fost confundat */15 cu 15? Cron builder-ul răspunde acestei
nevoi: a compune vizual o crontab expression, plecând de la preseturi curente sau
de la câmpuri individuale, și a obține expresia finală gata de lipit într-un crontab Linux, un Kubernetes
CronJob sau un schedule GitHub Actions.
Instrumentul este inversul decoderului nostru cron: acolo unde converterul ia o expresie și derulează următoarele execuții, builderul ia alegeri umane și produce expresia cron corespunzătoare.
Cum funcționează
Interfața grafică propune două moduri de compoziție complementare:
- Mod preset: un selector de frecvență (every minute, every hour, every day, every week, every month, every year, custom) care generează imediat o cron expression validă.
- Mod câmpuri: cinci câmpuri editabile (minut, oră, zi din lună, lună, zi din
săptămână) unde introduci liber
*, un întreg, un interval1-5, o listă1,15,30sau un pas*/15.
Builderul actualizează expresia în timp real și afișează o citire umană succintă ("în fiecare zi la 3h", "la fiecare 15 minute") care servește drept protecție: dacă fraza nu se potrivește cu intenția ta, expresia este probabil greșită.
Cele cinci câmpuri cron, în clar
O expresie cron standard conține cinci câmpuri separate prin spații:
minut ora ziua-din-luna luna ziua-din-saptamana
* * * * *
- minut (0 la 59);
- oră (0 la 23);
- zi din lună (1 la 31);
- lună (1 la 12 sau abrevieri Jan, Feb, etc.);
- zi din săptămână (0 la 7, 0 și 7 reprezentând amândouă duminica în majoritatea implementărilor).
Fiecare câmp acceptă mai multe forme: * (toate valorile), un întreg precis
(5), o listă (1,3,5), un interval (9-17), un pas (*/15
la fiecare 15 valori), sau o combinație (0-30/5).
Cazuri de utilizare tipice
- Dezvoltator care învață cron: vizualizarea cum interacționează fiecare câmp, fără să riști o expresie greșită în producție.
- Sysadmin grăbit: generarea în câteva secunde a unui schedule pentru un cron Linux, un Kubernetes CronJob sau un job Ansible fără să relucrești pagina man.
- Dezvoltator fără experiență POSIX: producerea unei crontab expression valide pentru Symfony Scheduler, Laravel Scheduler sau node-cron fără a cunoaște sintaxa istorică.
- DevOps în review: prototiparea rapidă a unei expresii de propus într-un pull request, apoi validarea sa cu decoder-ul cron.
- Migrare legacy: reformularea unei expresii cron istorice trecând prin builder pentru a te asigura de semantică înainte de a o împinge în altă parte.
Preseturi curente
Selectarea unui preset suprascrie câmpurile individuale și produce expresia corespunzătoare:
- În fiecare minut:
* * * * *. De evitat în producție în afara unei nevoi particulare. - În fiecare oră:
0 * * * *. La fiecare început de oră. - În fiecare zi:
0 0 * * *. La miezul nopții. - În fiecare săptămână:
0 0 * * 0. În fiecare duminică la miezul nopții. - În fiecare lună:
0 0 1 * *. Pe 1 a lunii la miezul nopții. - În fiecare an:
0 0 1 1 *. Pe 1 ianuarie la miezul nopții.
Pattern-uri curente de cunoscut
| Expresie | Citire umană |
|---|---|
0 0 * * * |
În fiecare zi la miezul nopții |
*/15 * * * * |
La fiecare 15 minute |
0 9 * * 1-5 |
În fiecare zi lucrătoare la 9h |
0 0 1 * * |
Pe 1 a lunii la miezul nopții |
0 0 * * 0 |
În fiecare duminică la miezul nopții |
*/5 9-17 * * 1-5 |
La fiecare 5 minute în orele lucrătoare |
0 3 * * * |
În fiecare zi la 3h dimineața |
30 2 1,15 * * |
Pe 1 și 15 a lunii la 2h30 |
Compunerea unei expresii personalizate
Pentru cazuri mai specifice, asistentul expune cele cinci câmpuri în intrare liberă. Câteva exemple utile:
- În fiecare zi la 3h dimineața: minut=
0, oră=3, alte câmpuri*. - La fiecare 15 minute: minut=
*/15, alte câmpuri*. - De luni până vineri la 9h: minut=
0, oră=9, zi-din-săptămână=1-5. - În fiecare 1 și 15 a lunii la prânz: minut=
0, oră=12, zi-din-lună=1,15. - La fiecare 5 minute între 9h și 17h: minut=
*/5, oră=9-17.
Cum să utilizezi cron builder-ul
- Alege un preset (every minute, every hour, every day, every week, every month, every year) care corespunde bazei nevoii tale.
- Rafinează dacă este necesar editând direct cele cinci câmpuri (minut, oră, zi din lună, lună, zi din săptămână).
- Citește fraza umană generată de instrument pentru a confirma intenția.
- Copiază expresia cron produsă prin butonul de copiere.
- Validează schedule-ul cu decoder-ul nostru cron care calculează următoarele date de execuție reale.
- Lipește expresia în crontab-ul tău Linux, Kubernetes CronJob, Symfony Scheduler sau workflow GitHub Actions.
Capcane clasice
- Zi din lună și zi din săptămână combinate: dacă cele două nu sunt
*, comportamentul diferă în funcție de implementări. Linux/Vixie cron aplică un SAU; bibliotecile moderne au uneori un comportament diferit. De evitat. - Ziua 1 = luni sau duminică?: în funcție de țară și convenție. Majoritatea cron Unix consideră duminică=0 și sâmbătă=6. Verifică planificatorul tău.
- Fus orar: un cron Unix utilizează implicit fusul serverului. Planificatorii aplicativi (Symfony Scheduler, Quartz) permit adesea fixarea unui fus dedicat.
- Minut lipsă:
* * * * *execută job-ul la fiecare minut, ceea ce rar este ce dorim. Gândește-te să fixezi un declanșator precis (0) pentru sarcini orare.
Citire umană și ieșire
Pe lângă expresia cron, instrumentul propune o citire umană succintă ("în fiecare zi la miezul nopții", "la fiecare 5 minute"). Este o protecție: dacă fraza nu corespunde intenției tale, expresia este probabil greșită. Pentru un caz complex, utilizează apoi decoder-ul nostru cron pentru a calcula următoarele date de execuție reale.
Întrebări frecvente
Pot edita manual expresia după utilizarea interfeței?
Da. Builderul nu este un mod exclusiv: cele cinci câmpuri rămân editabile în orice moment. Poți pleca de la un preset, apoi să ajustezi un câmp manual pentru a obține o crontab expression personalizată. Citirea umană este recalculată imediat.
Instrumentul suportă formatul Quartz cu 6 câmpuri (cu secunde)?
Nu: formatul cu 5 câmpuri este standardul Unix și baza comună a majorității planificatorilor
(Linux crontab, Kubernetes CronJob, GitHub Actions, GitLab CI, Symfony Scheduler, Laravel Scheduler).
Quartz (Java) acceptă un câmp suplimentar pentru secunde și simboluri specifice
(?, L, W, #), dar această nevoie rămâne rară.
Cum este gestionat fusul orar?
Builderul produce o expresie cron neutră: este motorul care execută job-ul ce aplică
fusul său orar. Pe un crontab Linux, este TZ-ul serverului. Pe GitHub Actions, este UTC. Pe
Kubernetes 1.27+, poți fixa spec.timeZone în manifest. Symfony Scheduler și
Quartz expun un fus dedicat per sarcină.
Cum să-mi validez expresia fără să o execut în producție?
Utilizează decoder-ul nostru cron. Calculează N următoarele execuții din momentul curent, fără a porni vreun job. Este cea mai bună metodă de a confirma că o cron expression trage într-adevăr la ora prevăzută înainte de a o deploya.
Care este raportul cu Symfony Scheduler?
Symfony Scheduler acceptă expresiile cron cu 5 câmpuri prin Schedule::cron('0 3 * * *', ...)
. Expresia produsă de builder poate deci fi lipită ca atare. Idem pentru Laravel
Scheduler (->cron('...')), node-cron, Hangfire și Airflow.
Trebuie să prefixez comanda în crontab-ul sistem?
Da, în /etc/crontab trebuie un utilizator (0 3 * * * www-data /usr/bin/php
...), în timp ce crontab -e per utilizator îl omite. Expresia însăși rămâne
identică.
Exemplu de cerere
curl -X POST https://cdrn.fr/api/v1/tools/cron-builder/execute \
-H "Content-Type: application/json" \
-d '{"preset":"none","minute":"*","hour":"*","day_of_month":"*","month":"*","day_of_week":"*"}'
Schema de intrare
| Câmp | Tip | Obligatoriu | Implicit |
|---|---|---|---|
preset |
choice (none, every_minute, hourly, daily, weekly, monthly, yearly) | – | none |
minute |
string | – | * |
hour |
string | – | * |
day_of_month |
string | – | * |
month |
string | – | * |
day_of_week |
string | – | * |
Puncte de acces
GET https://cdrn.fr/api/v1/tools- listează toate instrumentele disponibileGET https://cdrn.fr/api/v1/tools/cron-builder- obține schema acestui instrumentPOST https://cdrn.fr/api/v1/tools/cron-builder/execute- execută acest instrument cu un payload JSON