Sukurti cron išraišką

sukuria cron išraišką iš vizualinių laukų arba preset (kas minutę, kas valandą, kasdien, kassavaitę...)

Kodėl „Visual Cron“ kūrėjas?

cron išraiška susideda iš penkių laukų ir vis tiek išlieka vienu labiausiai generuojančių klaidų gamyboje. Kiek kartų kūrėjas parašė 0 0 * * 1 galvodamas „kiekvienas Pirmadieniais“, neprisimindami, kad 1 gali reikšti sekmadienį, priklausomai nuo diegimo? Kiek ar mes supainiojome */15 ir 15? Į tai atsako cron builder reikia: vizualiai sukurkite crontab išraišką iš esamų išankstinių nustatymų arba atskirų laukų ir paruoškite galutinę išraišką įklijuoti į Linux crontab, Kubernetes „CronJob“ arba „GitHub“ veiksmų tvarkaraštis.

Šis įrankis yra priešingas mūsų cron dekoderiui: kur konverteris paima išraišką ir vykdo kitas egzekucijas, statytojas pasirenka žmogaus pasirinkimą ir gamina atitinkama cron išraiška.

Kaip tai veikia

Grafinė sąsaja siūlo du vienas kitą papildančius komponavimo režimus:

  • Iš anksto nustatytas režimas: dažnio parinkiklis (kas minutę, kas valandą, kiekvieną dieną, kiekvieną savaitę, kiekvieną mėnesį, kiekvienais metais, tinkintas), kuris iš karto sugeneruoja cron išraišką galioja.
  • Lauko režimas: penki redaguojami laukai (minutė, valanda, mėnesio diena, mėnuo, diena savaitę), kur laisvai įvedate *, sveikąjį skaičių, diapazoną 1-5, sąrašą 1,15,30 arba veiksmas */15.

Kūrėjas atnaujina išraišką realiuoju laiku ir rodo glaustą žmogaus skaitymą („kiekvieną dieną 3 val. ryto“, „kas 15 minučių“), kuri yra apsaugos priemonė: jei sakinys neatitinka jūsų ketinimų, posakis tikriausiai neteisingas.

Penki kronų laukai, paprasta kalba

Įprastą cron išraišką sudaro penki laukai, atskirti tarpais:

minutė valanda mėnesio diena mėnuo savaitės diena
* * * * *
  • minutė (nuo 0 iki 59);
  • valanda (nuo 0 iki 23);
  • mėnesio diena (nuo 1 iki 31);
  • mėnuo (nuo 1 iki 12 arba santrumpos sausio, vasario ir t. t.);
  • savaitės diena (nuo 0 iki 7, 0 ir 7 dažniausiai sekmadienis įgyvendinimai).

Kiekvienas laukas priima keletą formų: * (visos reikšmės), konkretus sveikasis skaičius (5), sąrašas (1,3,5), diapazonas (9–17), žingsnis (*/15 kas 15 reikšmių) arba derinį (0-30/5).

Tipiški naudojimo atvejai

  • Kūrėjas, kuris mokosi cron: įsivaizduokite, kaip kiekvienas laukas sąveikauja, nerizikuodami klaidinga išraiška gamyboje.
  • Sisadminas skuba: per kelias sekundes sugeneruokite Linux cron tvarkaraštį, Kubernetes CronJob arba Ansible darbas neperskaičius man puslapio.
  • Kūrėjas be POSIX patirties: sukurkite crontab išraišką galioja Symfony Scheduler, Laravel Scheduler arba node-cron, nežinant istorinės sintaksės.
  • „DevOps“ peržiūra: greitai sukurkite išraiškos prototipą, kad galėtumėte pasiūlyti traukimo metu užklausą, tada patvirtinkite ją naudodami cron dekoderį.
  • Pasenęs perkėlimas: performuluokite istorinę cron išraišką naudodami kūrimo priemonę kad būtų užtikrinta semantika prieš stumiant ją kitur.

Bendrieji išankstiniai nustatymai

Pasirinkus išankstinį nustatymą, atskiri laukai perrašomi ir sukuriama atitinkama išraiška:

  • Kiekvieną minutę: * * * * *. Venkite gamyboje, nebent būtina ypač.
  • Kas valandą: 0 * * * *. Kiekvienos valandos pradžioje.
  • Kiekvieną dieną: 0 0 * * *. Vidurnaktį.
  • Kiekvieną savaitę: 0 0 * * 0. Kiekvieną sekmadienį vidurnaktį.
  • Kiekvieną mėnesį: 0 0 1 * *. 1 mėnesio vidurnaktį.
  • Kiekvienais metais: 0 0 1 1 *. sausio 1 d. vidurnaktį.

Dažni modeliai, kuriuos reikia žinoti

Išraiška Žmogaus skaitymas
0 0 * * * Kiekvieną dieną vidurnaktį
*/15 * * * * Kas 15 minučių
0 9 * * 1-5 Kiekvieną darbo dieną 9 val.
0 0 1 * * 1 mėnesio vidurnaktį
0 0 * * 0 Kiekvieną sekmadienį vidurnaktį
*/5 9–17 * * 1–5 Kas 5 minutes darbo valandomis
0 3 * * * Kiekvieną dieną 3 val.
30 2 1,15 * * Mėnesio 1 ir 15 dienomis 2.30 val.

Sukurkite pasirinktinę išraišką

Konkrečiais atvejais vedlys atskleidžia penkis laukus, kad būtų galima įvesti nemokamai. Kai kurie pavyzdžiai naudinga:

  • Kiekvieną dieną 3 val.: minutė=0, valanda=3 ir kt. * laukus.
  • Kas 15 minučių: minutė=*/15, kiti laukai *.
  • Nuo pirmadienio iki penktadienio 9 val.: minutė=0, valanda=9, day-of-the-week=1-5.
  • Kas 1 ir 15 mėnesio vidurdienį: minutė=0, valanda=12, day-of-month=1.15.
  • Kas 5 minutes nuo 9 iki 17 val.: minutė=*/5, time=9-17.

Kaip naudoti cron builder

  1. Pasirinkite išankstinį nustatymą (kiekvieną minutę, kas valandą, kiekvieną dieną, kiekvieną savaitę, kiekvieną mėnesį, kasmet) kuris atitinka jūsų poreikio pagrindą.
  2. Jei reikia, patikslinkite tiesiogiai redaguodami penkis laukus (minutė, valanda, mėnesio diena, mėnuo, diena savaitės).
  3. Perskaitykite įrankio sugeneruotą žmogaus sakinį, kad patvirtintumėte ketinimą.
  4. Nukopijuokite cron išraišką, sukurtą naudojant kopijavimo mygtuką.
  5. Patvirtinkite tvarkaraštį naudodami mūsų cron dekoderį, kuris apskaičiuoja kitos faktinės vykdymo datos.
  6. Įklijuokite išraišką į „Linux crontab“, „Kubernetes CronJob“, „Symfony“ planuoklį arba savo „GitHub Actions“ darbo eigą.

Klasikiniai spąstai

  • Mėnesio diena ir savaitės diena kartu: jei abi nėra *, elgesys skiriasi įgyvendinant. Linux/Vixie cron taiko ARBA; į Šiuolaikinės bibliotekos kartais elgiasi kitaip. Norėdami išvengti.
  • 1 diena = pirmadienis ar sekmadienis?: priklausomai nuo šalies ir susitarimo. Dauguma cron „Unix“ laiko sekmadienį = 0 ir šeštadienį = 6. Patikrinkite savo planuotoją.
  • Laiko juosta: Unix cron pagal numatytuosius nustatymus naudoja serverio laiko juostą. The Programų planuokliai (Symfony Scheduler, Quartz) dažnai leidžia nustatyti tam skirtą laiko juostą.
  • Trūksta minutės: * * * * * užduotį atlieka kiekvieną minutę, retai kada norime. Apsvarstykite galimybę nustatyti konkretų aktyviklį (0). valandines užduotis.

Žmogaus skaitymas ir produkcija

Be cron išraiškos, įrankis siūlo glaustą žmogaus skaitymą („visi dienų vidurnaktį“, „kas 5 minutes“). Tai yra apsaugos priemonė: jei sakinys neatitinka jūsų tyčia, posakis tikriausiai klaidingas. Sudėtingam atvejui naudokite mūsų cron dekoderis, kad būtų galima apskaičiuoti kitas faktines vykdymo datas.

Dažnai užduodami klausimai

Ar galiu neautomatiškai redaguoti išraišką panaudojęs sąsają?

Taip. Kūrėjas nėra išskirtinis režimas: penkis laukus galima redaguoti bet kuriuo metu. Jūs gali pradėti nuo išankstinio nustatymo, tada ranka pakoreguokite lauką, kad gautumėte crontab pritaikyta išraiška. Žmogaus rodmenys iš karto perskaičiuojami.

Ar įrankis palaiko 6 laukų kvarco formatą (su sekundėmis)?

Ne: 5 laukų formatas yra Unix standartas ir daugeliui planuotojų bendras pagrindas („Linux crontab“, „Kubernetes CronJob“, „GitHub Actions“, „GitLab CI“, „Symfony Scheduler“, „Laravel Scheduler“). Kvarcas (Java) priima papildomą lauką sekundėms ir konkretiems simboliams (?, L, W, #), tačiau toks poreikis išlieka retas.

Kaip tvarkoma laiko juosta?

Statytojas sukuria neutralią cron išraišką: tai variklis, kuris atlieka darbą, kuris taiko jį laiko juosta. „Linux crontab“ tai yra serverio TZ. „GitHub Actions“ yra UTC. Įjungta Kubernetes 1.27+, apraše galite nustatyti spec.timeZone. Symfony Scheduler ir Kvarcas kiekvienai užduočiai atskleidžia tam tikrą laiko juostą.

Kaip patvirtinti savo išraišką nepaleidžiant jos gamybinėje versijoje?

Naudokite mūsų cron dekoderį. Jis apskaičiuoja kitą N vykdymą nuo dabartinio momento, nepradėjus jokio darbo. Tai geriausias būdas patvirtinti, kad a cron išraiška suaktyvinama suplanuotu laiku prieš ją įdiegiant.

Ką tai turi bendro su Symfony Scheduler?

Symfony Scheduler priima 5 laukų cron išraiškas per Schedule::cron('0 3 * * *', ...) . Todėl kūrėjo sukurta išraiška gali būti įklijuota tokią, kokia yra. Tas pats ir Laraveliui Planuoklis (->cron('...')), mazgas-cron, Hangfire ir Airflow.

Ar komandos crontab lange turėtų būti priešdėlis?

Taip, /etc/crontab jums reikia vartotojo (0 3 * * * www-data /usr/bin/php ...), o crontab -e vienam vartotojui jo praleidžia. Pati išraiška išlieka identiški.

Užklausos pavyzdys

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":"*"}'

Įvesties schema

Laukas Tipas Privalomas Numatytasis
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 *

Galiniai taškai

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