Cron-lausekkeen lukeminen kenttä kerrallaan
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.
Viisi kenttää
| Kenttä | Sallitut arvot | Esimerkki |
|---|---|---|
| Minuutti | 0–59 | 30 on tunnin 30. minuutti |
| Tunti | 0–23 | 9 on klo 9.00, 24 tunnin kellossa |
| Kuukauden päivä | 1–31 | 15 on kuukauden 15. päivä |
| Kuukausi | 1–12 tai JAN–DEC | 3 tai MAR on maaliskuu |
| Viikonpäivä | 0–6 tai SUN–SAT | 0 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-5viikonpäivä-kentässä tarkoittaa maanantaista perjantaihin. - Askel käyttää vinoviivaa.
*/15minuuttikentässä tarkoittaa 0, 15, 30 ja 45.10-30/5tarkoittaa 10, 15, 20, 25 ja 30. - Nimet kuten
MON-FRIvoivat 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
| Lauseke | Merkitys |
|---|---|
* * * * * | Joka minuutti |
/15 * * * | Joka 15. minuutti |
0 * * * * | Tunnin minuutilla 0 eli joka tunti |
0 2 * * * | Joka päivä klo 2.00 |
0 9 * * 1-5 | Klo 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 * * 0 | Keskiyö joka sunnuntai |
0 0 1 1 * | Keskiyö 1. tammikuuta |
/5 9-17 * 1-5 | Joka 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.Ltarkoittaa viimeistä.Lkuukauden päivä -kentässä on kuukauden viimeinen päivä, ja6Lviikonpäivä-kentässä on viimeinen perjantai.Wtarkoittaa lähintä arkipäivää.15Won lähin arkipäivä 15. päivään, eikä se siirry toiseen kuukauteen.#tarkoittaa n:ttä viikonpäivää.6#3on 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
*/7minuuttikentä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ä lausekkeessatarkoittaa 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.


