Cron-lausekkeet selitettyinä: ajasta mitä tahansa
Sinun täytyy ajaa tietokannan varmuuskopio joka yö kello 3. Tai lähettää raportti joka maanantaiaamuna. Tai tyhjentää välimuisti 15 minuutin välein. Linux- ja Unix-palvelimilla tähän käytetään cron-ohjelmaa, ja tapa kertoa cronille milloin ajaa jotain on cron-lauseke.
Cron-lausekkeet näyttävät ensi silmäyksellä pelottavilta. 0 3 * * * tai */15 9-17 * * 1-5 voi vaikuttaa hölynpölyltä jos et tunne rakennetta. Mutta syntaksi on yllättävän yksinkertainen kun ymmärrät viisi kenttää.
Viisi kenttää
Jokaisessa standardissa cron-lausekkeessa on täsmälleen viisi kenttää, jotka on erotettu välilyönneillä. Jokainen kenttä edustaa aikayksikköä:
┌───────────── minuutti (0-59)
│ ┌───────────── tunti (0-23)
│ │ ┌───────────── kuukauden päivä (1-31)
│ │ │ ┌───────────── kuukausi (1-12)
│ │ │ │ ┌───────────── viikonpäivä (0-7, jossa 0 ja 7 ovat sunnuntai)
│ │ │ │ │
* * * * *
Siinä kaikki. Viisi kenttää vasemmalta oikealle: minuutti, tunti, kuukauden päivä, kuukausi, viikonpäivä.
Tiesitkö? Nimi "cron" tulee kreikan sanasta "chronos", joka tarkoittaa aikaa. Cron-daemoni (taustaprosessi) on ollut Unix-tyyppisten käyttöjärjestelmien keskeinen osa vuodesta 1975.
Erikoismerkit
Tähti (*) — jokainen arvo
Tähti tarkoittaa "jokainen mahdollinen arvo" kyseiselle kentälle.
* * * * * = joka minuutti, joka tunti, joka päivä.
Pilkku (,) — useita arvoja
Pilkku erottaa yksittäiset arvot.
0 9,12,18 * * * = minuutilla 0 tunneilla 9, 12 ja 18 (9:00, 12:00, 18:00).
Viiva (-) — arvoalue
Viiva määrittää alueen.
0 9-17 * * * = minuutilla 0 joka tunnilla 9:stä 17:ään (9:00 - 17:00, tunneittain).
Kauttaviiva (/) — askelarvot
Kauttaviiva määrittää välit.
*/15 * * * * = joka 15 minuutti (minuutit 0, 15, 30, 45 joka tunnilla).
0 */2 * * * = joka 2. tunnilla minuutilla 0 (keskiyö, 2:00, 4:00, ...).
Cron-lausekkeiden lukeminen: harjoituksia
Käydään läpi yleisiä esimerkkejä. Lue jokainen viisi kenttää vasemmalta oikealle.
0 3 * * * — päivittäin kello 3:00
| Kenttä | Arvo | Merkitys |
|---|---|---|
| Minuutti | 0 | Minuutilla 0 |
| Tunti | 3 | Tunnilla 3 (klo 3) |
| Kuukauden päivä | * | Joka päivä |
| Kuukausi | * | Joka kuukausi |
| Viikonpäivä | * | Joka viikonpäivä |
Käännös: "Joka yö kello 3:00." Klassinen valinta yöllisille varmuuskopioille.
*/15 * * * * — joka 15 minuutti
| Kenttä | Arvo | Merkitys |
|---|---|---|
| Minuutti | */15 | Joka 15 minuutti |
| Tunti | * | Joka tunti |
| Kuukauden päivä | * | Joka päivä |
| Kuukausi | * | Joka kuukausi |
| Viikonpäivä | * | Joka päivä |
Käännös: "Joka 15 minuutti, ympäri vuorokauden." Yleinen tilantarkistuksille ja välimuistin päivityksille.
0 9 * * 1-5 — arkisin kello 9:00
| Kenttä | Arvo | Merkitys |
|---|---|---|
| Minuutti | 0 | Minuutilla 0 |
| Tunti | 9 | Tunnilla 9 |
| Kuukauden päivä | * | Joka päivä |
| Kuukausi | * | Joka kuukausi |
| Viikonpäivä | 1-5 | Maanantaista perjantaihin |
Käännös: "Kello 9:00, maanantaista perjantaihin." Täydellinen päivittäisille työraporteille.
0 0 1 * * — kuukauden ensimmäisenä päivänä
| Kenttä | Arvo | Merkitys |
|---|---|---|
| Minuutti | 0 | Minuutilla 0 |
| Tunti | 0 | Tunnilla 0 (keskiyöllä) |
| Kuukauden päivä | 1 | 1. päivänä |
| Kuukausi | * | Joka kuukausi |
| Viikonpäivä | * | Mikä tahansa viikonpäivä |
Käännös: "Joka kuukauden ensimmäisenä päivänä keskiyöllä." Käytetään kuukausiraporteille, laskutukselle tai siivoukselle.
30 8 * * 1 — maanantaisin kello 8:30
| Kenttä | Arvo | Merkitys |
|---|---|---|
| Minuutti | 30 | Minuutilla 30 |
| Tunti | 8 | Tunnilla 8 |
| Kuukauden päivä | * | Joka päivä |
| Kuukausi | * | Joka kuukausi |
| Viikonpäivä | 1 | Maanantai |
Käännös: "Joka maanantai kello 8:30." Hyvä viikoittaisille tiimi-ilmoituksille.
Omien cron-lausekkeiden kirjoittaminen
Tässä on järjestelmällinen lähestymistapa:
- Aloita milloin. "Joka päivä kello 3" tai "joka 5 minuutti toimistoaikoina."
- Täytä kentät vasemmalta oikealle. Aloita minuutilla, sitten tunti, sitten kuukauden päivä, sitten kuukausi, sitten viikonpäivä.
- Käytä
*"jokainen" merkityksessä. Jos et välitä kentästä, käytä*. - Testaa ennen käyttöönottoa. Varmista aina, että lausekkeesi tuottaa odottamasi aikataulun.
Yleisten mallien pikaopas
| Aikataulu | Lauseke |
|---|---|
| Joka minuutti | * * * * * |
| Joka 5 minuutti | */5 * * * * |
| Joka tunti | 0 * * * * |
| Joka päivä keskiyöllä | 0 0 * * * |
| Joka päivä kello 3:00 | 0 3 * * * |
| Joka maanantai kello 9:00 | 0 9 * * 1 |
| Arkisin kello 8:30 | 30 8 * * 1-5 |
| Kuukauden ensimmäisenä | 0 0 1 * * |
| Joka 15 min, toimistoaikoina | */15 9-17 * * 1-5 |
| Kahdesti päivässä (9 ja 18) | 0 9,18 * * * |
| Joka sunnuntai kello 2:00 | 0 2 * * 0 |
Yleisiä virheitä
Tuntimuodon unohtaminen (0-23)
Tunti 13 on kello 13:00, ei tunti 1. Yleinen virhe on kirjoittaa 0 1 * * * ajatellen sen ajetavan kello 13:00, vaikka se tosiasiassa ajetaan kello 1:00.
Viikonpäiväsekaannus
Sunnuntai voi olla 0 tai 7 (molemmat ovat kelvollisia). Maanantai on 1, lauantai on 6. Jotkut odottavat maanantain olevan 0.
Kuukauden päivä vs. viikonpäivä -vuorovaikutus
Jos määrität sekä kuukauden päivän että viikonpäivän (kumpikaan ei ole *), useimmat cron-toteutukset ajaa työn kun jompikumpi ehto täyttyy, ei kun molemmat täyttyvät. Tämä yllättää monet.
Varoitus Lauseke 0 9 15 * 1 EI tarkoita "kello 9 15. päivänä, mutta vain jos se on maanantai." Se tarkoittaa "kello 9 joka kuukauden 15. päivänä JA kello 9 joka maanantai." Tämä on yleinen odottamattoman käyttäytymisen lähde.
Aikavyöhyketietoisuus
Cron toimii palvelimen paikallisessa aikavyöhykkeessä. Jos palvelimesi on UTC:ssä ja olet Helsingissä (UTC+2), 0 9 * * * cron-työ ajetaan kello 11:00 omassa ajassasi. Tarkista aina palvelimesi aikavyöhyke.
Vinkki Testaa ja visualisoi cron-lausekkeesi ennen käyttöönottoa: Kuinka lukea ja testata cron-lausekkeita. Katso seuraavat suoritusajat ja varmista, että aikataulu vastaa aikomaasi.
Rakenna ja testaa cron-lausekkeesi:
Ilmainen, välitön, ei rekisteröitymistä.