Rakenna cron-lauseke

rakentaa cron-lausekkeen visuaalisista kentistä tai esiasetuksesta (joka minuutti, tunnittain, päivittäin, viikoittain...)

Miksi visuaalinen cron-rakentaja?

Cron-lauseke koostuu vain viidestä kentästä, mutta se on silti yksi suurimmista tuotantovirheiden lähteistä. Kuinka monta kertaa kehittäjä on kirjoittanut 0 0 * * 1 ajatellen "joka maanantai", muistamatta, että 1 voi tarkoittaa sunnuntaita toteutuksesta riippuen? Kuinka monta kertaa */15 ja 15 on sekoitettu keskenään? Cron-rakentaja vastaa tähän tarpeeseen: rakenna crontab-lauseke visuaalisesti yleisten esiasetusten tai yksittäisten kenttien avulla ja saa lopullinen lauseke valmiina kopioitavaksi Linuxin crontabiin, Kubernetesin CronJobiin tai GitHub Actionsin aikatauluun.

Työkalu on vastakohta cron-dekooderillemme: siinä missä muunnin ottaa lausekkeen ja näyttää seuraavat suorituskerrat, rakentaja ottaa ihmisen tekemät valinnat ja tuottaa vastaavan cron-lausekkeen.

Miten se toimii

Graafinen käyttöliittymä tarjoaa kaksi toisiaan täydentävää rakennustapaa:

  • Esiasetustila: taajuuden valitsin (joka minuutti, joka tunti, joka päivä, joka viikko, joka kuukausi, joka vuosi, mukautettu), joka generoi välittömästi pätevän cron-lausekkeen.
  • Kenttätila: viisi muokattavaa kenttää (minuutti, tunti, kuukauden päivä, kuukausi, viikonpäivä), joihin voit kirjoittaa vapaasti *, kokonaisluvun, välin 1-5, luettelon 1,15,30 tai askeleen */15.

Rakentaja päivittää lausekkeen reaaliajassa ja näyttää selkokielisen kuvauksen ("joka päivä klo 03.00", "15 minuutin välein"), joka toimii varmistuksena: jos lause ei vastaa tarkoitustasi, lauseke on todennäköisesti väärin.

Viisi cron-kenttää selitettynä

Vakio- cron-lauseke sisältää viisi välilyönneillä erotettua kenttää:

minuutti  tunti  kuukauden-päivä  kuukausi  viikonpäivä
*         *      *                *         *
  • minuutti (0–59) ;
  • tunti (0–23) ;
  • kuukauden päivä (1–31) ;
  • kuukausi (1–12 tai lyhenteet Jan, Feb jne.) ;
  • viikonpäivä (0–7, joissa 0 ja 7 tarkoittavat molemmat sunnuntaita useimmissa toteutuksissa).

Jokainen kenttä hyväksyy useita muotoja: * (kaikki arvot), tietty kokonaisluku (5), luettelo (1,3,5), väli (9-17), askel (*/15 joka 15. arvo) tai yhdistelmä (0-30/5).

Tyypillisiä käyttötapauksia

  • Kehittäjä, joka opettelee cronia: nähdä, miten kukin kenttä vaikuttaa, ilman riskiä väärästä lausekkeesta tuotannossa.
  • Kiireinen ylläpitäjä: luoda muutamassa sekunnissa aikataulu Linuxin cronille, Kubernetes CronJobille tai Ansible-tehtävälle lukematta man-sivuja uudelleen.
  • Kehittäjä ilman POSIX-kokemusta: tuottaa pätevä crontab-lauseke Symfony Schedulerille, Laravel Schedulerille tai node-cronille tuntematta historiallista syntaksia.
  • DevOps-katselmointi: prototyypittää nopeasti lauseke pull requestia varten ja vahvistaa se sitten cron-dekooderilla.
  • Perityn koodin migraatio: muotoilla historiallinen cron-lauseke uudelleen rakentajan avulla varmistaakseen sen merkityksen ennen siirtämistä muualle.

Yleiset esiasetukset

Esiasetuksen valitseminen korvaa yksittäiset kentät and tuottaa vastaavan lausekkeen:

  • Joka minuutti : * * * * *. Vältettävä tuotannossa ilman erityistä syytä.
  • Joka tunti : 0 * * * *. Jokaisen tunnin alussa.
  • Joka päivä : 0 0 * * *. Keskiyöllä.
  • Joka viikko : 0 0 * * 0. Joka sunnuntai keskiyöllä.
  • Joka kuukausi : 0 0 1 * *. Kuukauden 1. päivä keskiyöllä.
  • Joka vuosi : 0 0 1 1 *. Tammikuun 1. päivä keskiyöllä.

Yleisiä tunnistettavia malleja

Lauseke Selkokielinen kuvaus
0 0 * * * Joka päivä keskiyöllä
*/15 * * * * 15 minuutin välein
0 9 * * 1-5 Arkipäivisin klo 09.00
0 0 1 * * Kuukauden 1. päivä keskiyöllä
0 0 * * 0 Sunnuntaisin keskiyöllä
*/5 9-17 * * 1-5 5 minuutin välein työaikana
0 3 * * * Joka päivä klo 03.00
30 2 1,15 * * Kuukauden 1. ja 15. päivä klo 02.30

Mukautetun lausekkeen rakentaminen

Erityistapauksia varten avustaja tarjoaa viisi kenttää vapaata syöttöä varten. Joitakin hyödyllisiä esimerkkejä:

  • Joka päivä klo 03.00 : minuutti=0, tunti=3, muut kentät *.
  • 15 minuutin välein : minuutti=*/15, muut kentät *.
  • Maanantaista perjantaihin klo 09.00 : minuutti=0, tunti=9, viikonpäivä=1-5.
  • Kuukauden 1. ja 15. päivä keskipäivällä : minuutti=0, tunti=12, kuukauden-päivä=1,15.
  • 5 minuutin välein klo 09.00 ja 17.00 välillä : minuutti=*/5, tunti=9-17.

Miten cron-rakentajaa käytetään

  1. Valitse esiasetus (joka minuutti, tunti, päivä, viikko, kuukausi tai vuosi), joka vastaa perustarvettasi.
  2. Hienosäädä tarvittaessa muokkaamalla suoraan viittä kenttää (minuutti, tunti, kuukauden päivä, kuukausi, viikonpäivä).
  3. Lue työkalun generoima selkokielinen lause varmistaaksesi tarkoituksesi.
  4. Kopioi tuotettu cron-lauseke kopiointipainikkeella.
  5. Vahvista aikataulu cron-dekooderillamme, joka laskee seuraavat todelliset suorituspäivät.
  6. Liitä lauseke Linuxin crontabiin, Kubernetes CronJobiin, Symfony Schedulerille tai GitHub Actions -työnkulkuun.

Tyypilliset sudenkuopat

  • Kuukauden päivän ja viikonpäivän yhdistäminen : jos kumpikaan ei ole *, käyttäytyminen vaihtelee toteutuksittain. Linux/Vixie cron soveltaa OR-logiikkaa; nykyaikaisissa kirjastoissa voi olla eri käytäntö. Tätä kannattaa välttää.
  • Päivä 1 = maanantai vai sunnuntai? : riippuu maasta ja käytännöstä. Useimmat Unix-cronit katsovat sunnuntai=0 ja lauantai=6. Tarkista käyttämäsi ajastin.
  • Aikavyöhyke : Unix-cron käyttää oletuksena palvelimen aikavyöhykettä. Sovellustason ajastimet (Symfony Scheduler, Quartz) mahdollistavat usein oman aikavyöhykkeen asettamisen.
  • Puuttuva minuutti : * * * * * suorittaa tehtävän joka minuutti, mikä on harvoin tarkoitus. Muista asettaa tarkka aloitushetki (0) tuntitehtäville.

Selkokielinen kuvaus ja tulos

Cron-lausekkeen lisäksi työkalu tarjoaa lyhyen selkokielisen kuvauksen ("joka päivä keskiyöllä", "5 minuutin välein"). Se on varmistus: jos lause ei vastaa tarkoitustasi, lauseke on todennäköisesti väärin. Monimutkaisissa tapauksissa käytä sen jälkeen cron-dekooderiamme laskeaksesi seuraavat todelliset suorituspäivät.

Usein kysytyt kysymykset

Voinko muokata lauseketta manuaalisesti käyttöliittymän käytön jälkeen?

Kyllä. Rakentaja ei ole rajoittava tila: kaikki viisi kenttää ovat muokattavissa milloin tahansa. Voit lähteä liikkeelle esiasetuksesta ja muokata kenttää käsin saadaksesi räätälöidyn crontab-lausekkeen. Selkokielinen kuvaus lasketaan uudelleen välittömästi.

Tukeeko työkalu 6-kenttäistä Quartz-muotoa (sekunneilla)?

Ei: 5-kenttäinen muoto on Unix-standardi ja useimpien ajastimien (Linux crontab, Kubernetes CronJob, GitHub Actions, GitLab CI, Symfony Scheduler, Laravel Scheduler) yhteinen perusta. Quartz (Java) hyväksyy lisäkentän sekunneille ja erityissymboleja (?, L, W, #), mutta tämä tarve on harvinaisempi.

Miten aikavyöhykettä hallitaan?

Rakentaja tuottaa neutraalin cron-lausekkeen: tehtävän suorittava moottori soveltaa omaa aikavyöhykettään. Linuxin crontabissa se on palvelimen aikavyöhyke. GitHub Actionsissa se on UTC. Kubernetes 1.27+:ssa voit asettaa spec.timeZone-arvon manifestissa. Symfony Scheduler ja Quartz tarjoavat tehtäväkohtaisen aikavyöhykkeen.

Miten voin vahvistaa lausekkeeni suorittamatta sitä tuotannossa?

Käytä cron-dekooderiamme. Se laskee N seuraavaa suorituskertaa nykyhetkestä alkaen käynnistämättä mitään tehtävää. Tämä on paras tapa varmistaa, että cron-lauseke toimii suunnitellusti ennen sen käyttöönottoa.

Miten tämä liittyy Symfony Scheduleriin?

Symfony Scheduler hyväksyy 5-kenttäiset cron-lausekkeet muodon Schedule::cron('0 3 * * *', ...) kautta. Rakentajan tuottama lauseke voidaan siis liittää sellaisenaan. Sama pätee Laravel Scheduleriin (->cron('...')), node-croniin, Hangfireen ja Airflowhun.

Pitääkö komennon eteen lisätä käyttäjä järjestelmän crontabissa?

Kyllä, tiedostossa /etc/crontab tarvitaan käyttäjä (esim. 0 3 * * * www-data /usr/bin/php ...), kun taas käyttäjäkohtainen crontab -e jättää sen pois. Itse lauseke pysyy samana.

Pyyntöesimerkki

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

Syöteskeema

Kenttä Tyyppi Pakollinen Oletus
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 *

Päätepisteet

  • GET https://cdrn.fr/api/v1/tools - listaa kaikki saatavilla olevat työkalut
  • GET https://cdrn.fr/api/v1/tools/cron-builder - hakee tämän työkalun skeeman
  • POST https://cdrn.fr/api/v1/tools/cron-builder/execute - suorittaa tämän työkalun JSON-payloadilla