fixmint
FI

Cron-lausekkeen lukeminen kenttä kerrallaan

Kirjoittaja · · 5 min lukuaika

Cron-lauseke on lyhyt tekstirivi, joka kertoo ajastimelle, milloin tehtävä ajetaan. Tavallisessa muodossa on viisi kenttää, jotka erotetaan välilyönneillä: minuutti, tunti, kuukauden päivä, kuukausi ja viikonpäivä. Rivi 0 9 * * 1-5 tarkoittaa klo 9.00 maanantaista perjantaihin. Jokainen kenttä on luku, nimi, lista, väli tai askel, tai * kaikille arvoille. Tehtävä ajetaan jokaisella ajanhetkellä, jolla kaikki kentät täsmäävät.

Cron-lausekkeen selittäjäCron-ajo käynnistyy väärään aikaanTee se ilmaiseksi

Viisi kenttää

KenttäSallitut arvotEsimerkki
Minuutti0–5930 on tunnin 30. minuutti
Tunti0–239 on klo 9.00, 24 tunnin kellossa
Kuukauden päivä1–3115 on kuukauden 15. päivä
Kuukausi1–12 tai JAN–DEC3 tai MAR on maaliskuu
Viikonpäivä0–6 tai SUN–SAT0 tai SUN on sunnuntai, 1 on maanantai

Joissain järjestelmissä myös 7 tarkoittaa sunnuntaita, mutta kaikki eivät hyväksy sitä, joten käytä 0 tai SUN. Cronissa ei tässä muodossa ole sekuntikenttää, joten pienin askel on yksi minuutti.

Listat, välit, askeleet ja nimet

  • tarkoittaa kaikkia kentän arvoja. * * * * ajetaan joka minuutti.
  • Lista käyttää pilkkuja. 0 9,17 * * * ajetaan joka päivä klo 9.00 ja klo 17.00.
  • Väli käyttää yhdysviivaa. 1-5 viikonpäivä-kentässä tarkoittaa maanantaista perjantaihin.
  • Askel käyttää vinoviivaa. */15 minuuttikentässä tarkoittaa 0, 15, 30 ja 45. 10-30/5 tarkoittaa 10, 15, 20, 25 ja 30.
  • Nimet kuten MON-FRI voivat korvata numerot. Ne ovat helpompia lukea, jos ajastin hyväksyy ne.

Nämä osat voivat yhdistyä. 0 8-18/2 * * * ajetaan minuutilla 0 joka toinen tunti klo 8.00–18.00 välillä.

Yleisiä aikatauluja

LausekeMerkitys
* * * * *Joka minuutti
/15 * * *Joka 15. minuutti
0 * * * *Tunnin minuutilla 0 eli joka tunti
0 2 * * *Joka päivä klo 2.00
0 9 * * 1-5Klo 9.00 maanantaista perjantaihin
0 9,17 * * *Klo 9.00 ja klo 17.00 joka päivä
30 6 1 * *Klo 6.30 joka kuukauden 1. päivä
0 0 * * 0Keskiyö joka sunnuntai
0 0 1 1 *Keskiyö 1. tammikuuta
/5 9-17 * 1-5Joka 5. minuutti klo 9.00–17.55, maanantaista perjantaihin

Huomaa, että 0 0 * * on keskiyö ja 0 12 * * on keskipäivä. Tunnin väärin ymmärtäminen on yksi yleisimmistä virheistä.

Kuukauden päivä ja viikonpäivä

Kun sekä kuukauden päivä -kenttä että viikonpäivä-kenttä on rajattu, tehtävä ajetaan, kun jompikumpi täsmää. Tämä on klassinen sääntö Vixie cronissa ja monissa siitä johdetuissa järjestelmissä. Esimerkiksi 0 0 13 * 5 ajetaan keskiyöllä joka kuukauden 13. päivä ja lisäksi joka perjantai. Ihmiset odottavat usein ajon vain silloin, kun 13. päivä on perjantai, ja saavat enemmän ajoja kuin suunnittelivat.

Jos jompikumpi kentistä on *, lasketaan vain toinen kenttä. Jos haluat ajaa tehtävän vain perjantaina 13. päivänä, aseta tehtävä joka perjantaille ja tarkista päivämäärä skriptin sisällä. Muut ajastimet, myös jotkin pilvipalvelut, voivat noudattaa eri sääntöjä, joten lue niiden ohjeet.

Aikavyöhykkeet ja kesäaika

Cron ajaa aikaa sen koneen tai palvelun kellon mukaan, jolla se toimii, ja yleensä se on koneen paikallinen aikavyöhyke. Tehtävä, joka on asetettu klo 2.30, ajetaan kyseisen kellon mukaan klo 2.30. Tarkista ensin vyöhyke (Linuxissa date näyttää sen). Jos haluat, että tehtävät noudattavat yhtä kelloa kaikkialla, monet tiimit käyttävät palvelimissa UTC-aikaa. Jotkin ajastimet antavat asettaa aikavyöhykkeen kullekin tehtävälle.

Kesäaika muuttaa kelloa kahdesti vuodessa. Keväällä monissa paikoissa siirrytään suoraan klo 2.00:sta klo 3.00:aan, joten klo 2.30 -ajoa ei tapahdu lainkaan. Syksyllä tunti klo 1.00–1.59 esiintyy kahdesti. Ajastimet käsittelevät näitä tilanteita eri tavoin. Jotkut ohittavat tehtävän, jotkut ajavat sen kerran ja jotkut kahdesti. Pidä tehtävät poissa aamuvarhaisen muutosikkunasta tai käytä UTC-aikaa, jos ero on sinulle tärkeä.

Kuusi kenttää ja Quartz

Jotkin ajastimet lisäävät alkuun sekuntikentän, joten /10 * * * * ajetaan 10 sekunnin välein. Javan Quartz-ajastin käyttää sekunteja, minuutteja, tunteja, kuukauden päivää, kuukautta, viikonpäivää ja valinnaista vuotta. Lisäksi se käyttää neljää erikoismerkkiä:

  • ? tarkoittaa ”ei tiettyä arvoa”. Quartz vaatii sitä joko kuukauden päivä- tai viikonpäivä-kentässä sen mukaan, kumpaa et aseta.
  • L tarkoittaa viimeistä. L kuukauden päivä -kentässä on kuukauden viimeinen päivä, ja 6L viikonpäivä-kentässä on viimeinen perjantai.
  • W tarkoittaa lähintä arkipäivää. 15W on lähin arkipäivä 15. päivään, eikä se siirry toiseen kuukauteen.
  • # tarkoittaa n:ttä viikonpäivää. 6#3 on kolmas perjantai.

Quartz numeroi päivät eri tavalla kuin viiden kentän muoto. Sen 1 on sunnuntai ja 7 on lauantai, joten maanantaista perjantaihin on 2-6, ei 1-5. Tarkista aina, mitä muotoa ajastimesi käyttää, ennen kuin kopioit rivin.

Yleisimmät virheet

  • */7 minuuttikentässä. Arvot ovat 0, 7, 14 ja niin edelleen aina 56:een asti. Seuraava olisi 63, jota ei ole, joten ajo 56 jälkeen tapahtuu seuraavan tunnin minuutilla 0. Väli on vain neljä minuuttia, ja välit ovat epätasaiset. Käytä askelta, joka jakaa 60:n tasan, kuten 5, 10, 15 tai 30.
  • Helmikuun 30. Sellaista päivää ei ole, joten 0 0 30 2 * ei koskaan aja. Sama koskee 31. päivää kuukaudessa, jossa on 30 päivää. Jompikumpi -säännön mukaan viikonpäivärajoitus voi silti aiheuttaa ajon muina päivinä, joten tarkista tulos.
  • Tunti 24 tai minuutti 60. Nämä ovat alueen ulkopuolella. Useimmat ajastimet hylkäävät ne tallennettaessa, mutta eivät kaikki.
  • Sekuntien odottaminen. Viiden kentän rivi ajetaan vain kokonaisilla minuuteilla.
  • Cronin sekoittaminen säännöllisiin lausekkeisiin. Cronissa tarkoittaa kaikkia arvoja. Säännöllisessä lausekkeessa tarkoittaa edeltävän kohdan toistamista. Käytä Regex-testaajaa kuvioille ja pidä cron-rivit erillään.

Tarkista seuraavat ajot

Ennen kuin luotat aikatauluun, lue rivi selkokielisenä ja listaa sen seuraavat muutama ajankohta. Cron-lausekkeen selittäjä tekee molemmat, ja se on nopein tapa huomata jompikumpi -sääntö tai outo askel.

Pikavastaukset

Onko ensimmäinen kenttä minuutit vai sekunnit?

Minuutit, tavallisessa viiden kentän muodossa. Vain jotkin kuuden kentän ajastimet lisäävät sekunnit, ja ne laittavat ne ensimmäiseksi.

Miksi tehtäväni ajetaan perjantaisin ja myös 13. päivänä?

Kuukauden päivä- ja viikonpäivä-kentät ovat molemmat asetettu, joten tehtävä ajetaan, kun jompikumpi täsmää. Aseta toinen kenttä arvoon *, jos haluat vain toisen.

Käyttääkö cron UTC-aikaa?

Vain jos kone tai palvelu on asetettu UTC-aikaan. Muuten se käyttää kyseisen järjestelmän paikallista aikavyöhykettä.

Käännetty tekoälyn avulla: Englanninkielinen alkuperäisteos.

Kommentit

    Ei vielä kommentteja. Ole ensimmäinen.

    Arvosanasi (valinnainen)

    Sähköpostiosoitettasi ei näytetä eikä tallenneta.

    Kannen kuva: Agentic AI in the BrowserAgentic AI in the Browser

    Käyttötapauksia yksityisyys edellä -tekoälytyönkuluihin, jotka toimivat suoraan selaimessa. Sama ajatus, jolle fixmint on rakennettu: tehdään omalla laitteella.

    $4.99Osta GumroadistaEnglanniksi