Tools Blog

Cron-lausekkeiden ymmärtäminen: Käytännön opas tehtävien automatisointiin

Cron Job Automation

Jos olet koskaan hallinnut Linux-palvelinta, työskennellyt taustakehityksessä tai määrittänyt automaattisia pilvitoimintoja, olet todennäköisesti kohdannut merkkijonon, joka näyttää tältä: 0 2 * * *. Asiattomalle se näyttää näppäimistöön jääneeltä kirjoitusvirheeltä. Järjestelmänvalvojille se on nykyaikaisen infrastruktuuriautomaation sydän: Cron Expression.

Cron on Internetin näkymätön moottori. Se varmistaa, että tietokanta varmuuskopioidaan klo 3.00, se käynnistää sähköpostit, jotka saat joka maanantaiaamu, ja tyhjentää väliaikaiset palvelintiedostot ennen kuin ne kaatuvat järjestelmään. Mutta voimastaan ​​huolimatta syntaksia on tunnetusti vaikea jäsentää ihmisille. Tässä syvässä sukelluksessa selvitämme tähdet ja opetamme sinua lukemaan ja kirjoittamaan cron-aikatauluja kokeneen DevOps-insinöörin tavoin.

Mikä on Cron ja Crontab?

Cron on Unix-tyyppisistä käyttöjärjestelmistä löytyvä aikaperusteinen työn ajoitus. Nimi "cron" tulee kreikan sanasta aikaa chronos. Käyttäjät, jotka määrittävät ja ylläpitävät ohjelmistoympäristöjä, käyttävät cronia töiden (komentojen tai komentosarjojen) ajoittamiseen määräajoin suoritettavaksi määrättyinä aikoina, päivinä tai väliajoin.

Crontab (Cron-taulukko) on määritystiedosto, johon nämä aikataulut on tallennettu. Kun muokkaat crontab-tiedostoa päätteen kautta, kirjoitat luettelon ohjeista, jotka kertovat palvelimelle tarkalleen, mitä suorittaa ja milloin.

5 tähden purkaminen

Tavallinen cron-lauseke koostuu viidestä kentästä, jotka on erotettu välilyönnillä. Jokainen kenttä edustaa tiettyä aikayksikköä, ja ne luetaan aina vasemmalta oikealle tässä järjestyksessä:

* * * * *  command_to_execute
- - - - -
| | | | |
| | | | +----- Day of the Week (0 - 6) (Sunday=0 or 7)
| | | +------- Month (1 - 12)
| | +--------- Day of the Month (1 - 31)
| +----------- Hour (0 - 23)
+------------- Minute (0 - 59)

Tähti (*) tarkoittaa "tämän kentän kaikkia mahdollisia arvoja". Joten ilmaisu * * * * * tarkoittaa kirjaimellisesti: "Juokse joka minuutti, joka tunti, joka päivä, joka kuukausi, jokaisena viikonpäivänä."

Syntaksin muokkaukset: askeleet, alueet ja luettelot

Cronin voima tulee sen modifioijista. Et ole rajoittunut vain tiettyihin numeroihin tai "kaikkiin".

1. Step Modifier (/)

Jos haluat skriptin ajavan 15 minuutin välein, käytä vaihetta. */15 * * * * tarkoittaa "jokaista minuuttia, joka on jaollinen 15:llä". Se kulkee kello 0, 15, 30 ja 45 yli tunnin.

2. Alueen muokkaus (-)

Jos haluat skriptin toimivan vain työaikana, käytä vaihteluväliä. 0 9-17 * * * tarkoittaa "ajoa minuutilla nolla, tunnin välein klo 9.00 - 17.00".

3. Luettelon muokkaus (,)

Jos haluat, että jotain suoritetaan tiettyinä, ei-peräkkäisinä päivinä, käytä luetteloa. 0 0 1,15 * * tarkoittaa "ajoa keskiyöllä kuun 1. ja 15. päivänä".

Lopeta Cron-lausekkeiden arvailu

Älä riskeeraa varmuuskopion suorittamista joka minuutti kuukauden sijaan. Yksi kirjoitusvirhe voi kaataa tuotantopalvelimen. Käytä interaktiivista visuaalista generaattoriamme luodaksesi ja validoidaksesi cron-merkkijonoja turvallisesti.

Avaa Cron Job Generator

Vaarallisin Cronin virhe

Yleisin ja katastrofaalisin kehittäjien tekemä virhe on "Minuutti"-kentän hämmentäminen. Tarkastellaan tilannetta, jossa haluat suorittaa tietokannan puhdistuskomentosarjan kerran tunnissa klo 2.00.

Virhe: * 2 * * *

Jos kirjoitat yllä olevan, käsket palvelinta suorittamaan komentosarjan "Joka minuutti, vuorokauden toisen tunnin aikana". Raskas tietokannan puhdistuskomentosarja käynnistyy 60 kertaa peräkkäin, mikä todennäköisesti ylikuormittaa suorittimen, lukitsee tietokantataulukoita ja aiheuttaa massiivisen käyttökatkon.

Oikea tapa: 0 2 * * *

Tämä nimenomaisesti käskee palvelimen toimimaan vain "2. tunnin nollaminuutissa". Se suoritetaan tasan kerran kello 2:00.

Usein kysytyt kysymykset (FAQ)

Ottaako cron huomioon aikavyöhykkeet?

Oletusarvoisesti cron arvioi lausekkeet sen palvelimen paikallisen järjestelmäajan perusteella, jolla se toimii. Jos palvelintasi isännöi AWS-alueella Lontoossa, se toimii UTC/GMT-tilassa. Sinun on otettava huomioon aikavyöhykeerot, jos käyttäjäsi ovat New Yorkissa tai Tokiossa.

Voinko ajastaa cron-työn suoritettavaksi joka sekunti?

Ei. Standard Unix cron on rajoitettu yhden minuutin resoluutioon. Jos tarvitset minuuttiajoitusta (esim. 10 sekunnin välein), sinun on käytettävä erillistä daemon-työkalua tai kirjoitettava komentosarja, joka suoritetaan joka minuutti, mutta silmukoi sisäisesti nukkumiskomennoilla.

Mitä merkkijonot, kuten @daily tai @hourly, tarkoittavat?

Monet nykyaikaiset cron-toteutukset tukevat epästandardeja ennalta määritettyjä makroja aikataulutuksen helpottamiseksi. @daily on täsmälleen sama kuin 0 0 * * * (keskiyö joka päivä). @hourly on sama kuin 0 * * * *. Vaikka ne ovat hyödyllisiä, niitä ei tueta yleisesti kaikissa vanhoissa järjestelmissä.