Apskaičiuoti kitas cron išraiškos vykdymo datas

analizuoja ir parodo cron konfigūracijos kitas vykdymo datas

Kas yra cron išraiška?

Cron išraiška yra trumpa eilutė, apibūdinanti pasikartojimą laikui bėgant. The formatą, paveldėtą iš Unix, sudaro penki laukai, atskirti tarpais: minute, valanda, mėnesio diena, mėnuo ir savaitės diena. Ši sintaksė gimė kartu su demonu Aštuntajame dešimtmetyje Briano Kernighano cron, vėliau apibendrinta Vixie cron (1987) palaiko visi šiuolaikiniai Linux ir macOS platinimai. Šiandien ta pati sintaksė randama daugumoje debesų planavimo priemonių (AWS EventBridge, GCP Cloud Scheduler, Azure Logic Programos) ir CI / CD („GitHub Actions“, „GitLab CI“, „Jenkins“).

┌──── minutė (0–59)
│ ┌── valanda (0-23)
│ │ ┌── mėnesio diena (1-31)
│ │ │ ┌── mėnesiai (1–12 arba SAUSIO–GRUOŽIO DEC.)
│ │ │ │ ┌── savaitės diena (0–7 arba sekmadienis–šeštadienis, 0 ir 7 = sekmadienis)
│ │ │ │ │
* * * * *

Todėl gerai suformuota cron išraiška apibrėžia tikslų cron tvarkaraštį: kiekvienas laukas gali būti fiksuota reikšmė, diapazonas, sąrašas, veiksmas arba viską atitinkanti žvaigždutė. Crontab išraiškos kompaktiškumas yra jos stiprybė, tačiau ji taip pat daro ją Cron dekoderis būtinas norint vizualiai patvirtinti ketinimą. Štai ir visa esmė šio cron keitiklio: pateikite įskaitomą cron paaiškinimą ir sąrašą sekančios egzekucijos.

Krono išraiškos anatomija

Penki laukai turi bendrą gramatiką. Čia pateikiamos ribos, kurias priima kiekvienas a stulpelis Standartinė crontab išraiška:

  • Minutė: 0–59.
  • Laikas: 0–23, 24 valandų formatas.
  • Mėnesio diena: 1–31.
  • Mėnuo: 1–12 arba tekstinės santrumpos JAN, FEB, MAR, BAR, GEGUŽĖS, BIRŽELIO, JUL, AUG, SEP, OCT, NOV, DEC.
  • Savaitės diena: 0–7, kur 0 ir 7 abu reiškia sekmadienį arba santrumpas SUN, MON, TUE, TRE, THU, PN, ŠE.

Specialieji simboliai, bendrinami penkiuose laukuose:

  • *: bet kuri reikšmė, atitinka visas leistinas reikšmes lauke.
  • ,: atskiras sąrašas, pvz., 1,15,30 minučių lauke.
  • -: apimantis diapazonas, pvz., 9–17 biuro valandoms.
  • /: veiksmas, pvz., */15 = kas 15 vienetų arba 0–30/5 = kas 5 minutes nuo 0 iki 30.

Quartz plėtiniai („Java“, „AWS EventBridge“, „Spring“): gramatika padidinama iki 6 arba 7 laukai su sekundžių stulpeliu priekyje (0–59) ir kartais stulpeliu Vėlesni metai (1970–2099). Quartz taip pat pristato ? (nėra konkretaus vertė, norint atsieti mėnesio dieną ir savaitės dieną), L (paskutinė: paskutinė mėnesio diena, arba praėjusį penktadienį su 5L), W (artimiausia darbo diena) ir # (N-oji mėnesio savaitės diena, pvz., 2#3 3-iam pirmadieniui). Išraiška Kvarcas paprastai nesuderinamas su UNIX crontab ir atvirkščiai: tai yra pagrindinis klaidos šaltinis kopijuojant cron išraišką iš vienos platformos į kitą.

# UNIX / Vixie cron (5 laukai)
0 9 * * 1-5

# Kvarcas (6 laukai su sekundėmis)
0 0 9? * PIRMAD - PE

# Kvarcas (7 laukai su metais)
0 0 9? * 2026 m. PIRMADIENIS–PENKT.

Kodėl iššifruoti cron išraišką?

Skaitymas 0 0 * * * yra greitas. Skaityti */7 2-5 1,15 * 1-5 yra daug mažiau. Kada posakis yra už trivialus, padidėja interpretacijos klaidos rizika ir cron dekodavimas tampa savarankišku peržiūros etapu.

  • Derinimo gamyba: supraskite, kodėl užduotis buvo suaktyvinta 03:17, o ne 03:00 arba nustatyti dviejų darbų sutapimą.
  • Kodo peržiūra: patvirtinkite, kad planavimo priemonė, nusiunčiama kaip ištraukimo užklausa, daro tai, ką daro teigia autorius, neprivalėdamas įsiminti kiekvieno simbolio semantikos.
  • Tvarkaraščio auditas: peržiūrėkite Linux cron užduotis /etc/crontab ir /etc/cron.d/, Jenkins aktyvikliai, Kubernetes CronJob spec.schedule, taisyklės AWS EventBridge ir GCP Cloud Scheduler darbai.
  • Senas perkėlimas: atnaujinkite istorinį /etc/crontab be dokumentaciją ir perkurkite užduočių žemėlapį prieš infrastruktūros pakeitimą.
  • Įdiegimas: leiskite naujam kūrėjui iš naujo perskaityti crontab nereikia per naktį išmokti visų specialiųjų simbolių.

Kaip naudotis cron dekoderiu

Procedūra, kurios reikia laikytis norint iššifruoti crontab išraišką naudojant įrankį:

  1. Įklijuokite cron išraišką į įvesties lauką (5 laukai, atskirti tarpai).
  2. Nurodykite kitų skaičiuotinų vykdymų skaičių.
  3. Spustelėkite konvertuoti, kad paleistumėte cron dekodavimą: įrankis grąžina žmogaus sakinys, paaiškinantis suaktyvinimą, ir kitų egzekucijų sąrašas su data.
  4. Vizualiai patikrinkite, ar datos atitinka jūsų ketinimą (laikas, diena, dažnis).
  5. Nukopijuokite išvestį naudodami kopijavimo mygtuką, kad įklijuotumėte ją į bilietą, PR arba dokumentaciją techninis.

Įrankis teikia ne tik sintaksinį analizavimą: jis pateikia paaiškinimą cron natūralia kalba, todėl jis yra ir cron dekoderis, ir a tvarkaraščio tikrintuvas.

Klasikiniai cron išraiškos pavyzdžiai

Toliau pateikti modeliai apima daugumą cron tvarkaraščių, sutinkamų gamyboje. Jie visi galioja „Linux crontab“, „Kubernetes CronJob“, „GitHub Actions“ ir daugumoje paraiškų planuotojai.

Išraiška Žmogaus skaitymas
* * * * * Kiekvieną minutę
0 * * * * Aiškiai kas valandą
0 0 * * * Kiekvieną dieną vidurnaktį
0 0 * * 0 Kiekvieną sekmadienį vidurnaktį
*/15 * * * * Kas 15 minučių
0 9 * * 1-5 9.00 val. nuo pirmadienio iki penktadienio
0 0 1 * * Kiekvieno mėnesio 1 d. vidurnaktį
0 0,12 * * * Kiekvieną dieną vidurnaktį ir vidurdienį
*/5 9–17 * * 1–5 Kas 5 minutes darbo valandomis
30 2 1,15 * * Mėnesio 1 ir 15 dienomis 2.30 val.

Jei norite vykdyti cron užduotį „Linux“ serveryje, redaguokite naudotojo skirtuką cron iš apvalkalo:

# redaguoti dabartinio vartotojo crontab
$ crontab -e

# išvardykite esamas užduotis
$ crontab -l

# pridėtos eilutės pavyzdys: kasdieninė atsarginė kopija 3 val
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

cron keitiklio išvesties pavyzdys */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
...

Dažnai užduodami klausimai apie cron dekoderį

Kuo skiriasi UNIX cron ir Quartz?

UNIX / Vixie cron naudoja 5 laukus (nuo minutės iki savaitės dienos), be tikslumo iki sekundės ir neturi gimtoji sąvoka „paskutinė mėnesio diena“. Kvarcas (Java, Spring, AWS EventBridge) prideda stulpelį sekundės viršuje, kartais metų stulpelis apačioje ir keli simboliai (?, L, W, #) trūksta Linux crontab. A cron išraiška 6 laukų kvarcas nėra tiesiogiai perkeliamas /etc/crontab ir atvirkščiai. Mūsų cron dekoderis skirtas 5 formatui laukus, kurie apima daugumą planuotojų.

Kaip paleisti cron užduotį kas 5 minutes?

Atlikdami veiksmą / minučių laukelyje:

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

Ši crontab išraiška suaktyvina scenarijų kiekvienos minutės 0, 5, 10, 15... valandą, kiekvieną dieną. Norėdami apriboti darbo valandas nuo pirmadienio iki penktadienio, pridėkite apribojimus laiko ir savaitės dienos laukuose: */5 9-17 * * 1-5.

Ką reiškia žvaigždutė (*) cron išraiškoje?

Žvaigždutė reiškia bet kurią reikšmę: ji atitinka visas įgaliotąsias lauko vertes. Į 0 0 * * *, trys žvaigždutės reiškia „bet kurią mėnesio dieną, bet kurią mėnesį, bet kurią savaitės dieną. Kartu su pirmaisiais dviem laukais, nustatytais į 0, mes gauna „kiekvieną dieną vidurnaktį“. Žvaigždutė taip pat gali būti derinama su žingsniu: */15 in minutė = kas 15 minučių.

Ar „Crontab“ turi laiko juostą?

Pagal numatytuosius nustatymus nustatyta serverio laiko juosta. Linux crontab sistemoje tai yra sistema TZ (dažnai UTC VPS ir konteineriai). „GitHub Actions“ verčia UTC. Kubernetes CronJob naudoja valdiklio laiko juostą, konfigūruojama naudojant spec.timeZone nuo 1.27. AWS EventBridge įvertina išraiškas pagal UTC. Programų planuokliai (Symfony Scheduler, Quartz, Airflow) dažnai leidžia nustatyti a laiko juosta, skirta kiekvienai užduočiai. Jei abejojate, patikrinkite datą tiksliniame serveryje ir palyginti su cron keitiklio išvestimi.

Cron užduotis ir komanda: kurią pasirinkti?

cron naudojamas pasikartojančiai užduočiai atlikti pagal tvarkaraštį. Naudojamas at komandą vykdyti tik vieną kartą tam tikru metu. Kasdienei atsarginei kopijai, žurnalo rotacija arba įprastas API iškvietimas, naudokite cron. Norėdami atidėti vieną operaciją („iš naujo paleisti šį diegimą 22 val. šį vakarą“), naudokite adresu:

$ echo "/usr/local/bin/deploy.sh" | 22:00
Kaip patikrinti cron išraišką jos nesuaktyvinant?

Būtent toks yra šio cron keitiklio vaidmuo: jis apskaičiuoja kitą N egzekucijos nuo dabartinio laiko, nepradėjus jokio darbo. Iš karto pamatysite, ar jūsų Crontab išraiška suaktyvinama 03:00, kaip tikėtasi, arba 03:17 atsitiktinai. Norėdami eiti toliau dar prieš diegdami užduotį, taip pat galite išbandyti tik scenarijų (bash -x script.sh) ir patikrinkite crontab failo sintaksę naudodami crontab -T failą paskirstymuose kurie tai palaiko.

Kas atsitiks, jei nustatyta ir mėnesio diena, ir savaitės diena?

„Vixie cron“ („Linux“) taisyklė yra logiška ARBA: darbas suaktyvinamas, jei vienas arba kitaiš dviejų laukų atitinka. Tai prieštarauja intuityviai ir yra klaidų šaltinis. Kvarcas naudoja a IR, todėl įvestas simbolis ?, kuris aiškiai nurodo „ne suvaržymas.“ Paprastai taisykite tik vieną iš dviejų laukų.

Užklausos pavyzdys

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

Įvesties schema

Laukas Tipas Privalomas Numatytasis
cron string
number_next_date integer

Galiniai taškai

  • GET https://cdrn.fr/api/v1/tools - išvardija visus galimus įrankius
  • GET https://cdrn.fr/api/v1/tools/cron-converter - gauna šio įrankio schemą
  • POST https://cdrn.fr/api/v1/tools/cron-converter/execute - vykdo šį įrankį su JSON payload