Laske cron-lausekkeen seuraavat suoritukset
- Hallintapaneeli
- Dokumentaatio
- API
Mikä on cron-lauseke?
Cron-lauseke on lyhyt merkkijono, joka kuvaa ajallista toistuvuutta. Unixista periytyvä
muoto koostuu viidestä välilyönneillä erotetusta kentästä: minuutti, tunti,
kuukauden päivä, kuukausi ja viikonpäivä. Tämä syntaksi syntyi Brian Kernighanin
cron-demonin myötä 1970-luvulla, ja myöhemmin Vixie cron (1987) yleisti sen kaikkien
nykyaikaisten Linux- ja macOS-jakeluiden käyttöön. Nykyään samaa syntaksia käytetään useimmissa
pilviajastimissa (AWS EventBridge, GCP Cloud Scheduler, Azure Logic Apps) ja CI/CD-työkaluissa
(GitHub Actions, GitLab CI, Jenkins).
┌──── minuutti (0-59)
│ ┌── tunti (0-23)
│ │ ┌── kuukauden päivä (1-31)
│ │ │ ┌── kuukausi (1-12 tai JAN-DEC)
│ │ │ │ ┌── viikonpäivä (0-7 tai SUN-SAT, 0 ja 7 = sunnuntai)
│ │ │ │ │
* * * * *
Oikein muodostettu cron-lauseke määrittelee tarkan cron-aikataulun: kukin kenttä voi olla kiinteä arvo, väli, luettelo, askel tai kaikki arvot kattava tähti. Crontab-lausekkeen tiiviys on sen vahvuus, mutta juuri siksi cron-dekooderi on välttämätön tarkoituksen visuaaliseen vahvistamiseen. Tämä on cron-muuntimen tarkoitus: tuottaa luettava selitys sekä luettelo seuraavista suorituskerroista.
Cron-lausekkeen anatomia
Viisi kenttää jakavat yhteisen kieliopin. Tässä ovat vakiomuotoisen crontab-lausekkeen kunkin sarakkeen hyväksymät rajat:
- Minuutti:
0-59. - Tunti:
0-23, 24 tunnin muodossa. - Kuukauden päivä:
1-31. - Kuukausi:
1-12tai tekstilyhenteetJAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC. - Viikonpäivä:
0-7, joissa0ja7tarkoittavat molemmat sunnuntaita, tai lyhenteetSUN,MON,TUE,WED,THU,FRI,SAT.
Erikoismerkit, jotka jaetaan kaikkien viiden kentän kesken:
*: mikä tahansa arvo, vastaa kentän kaikkia sallittuja arvoja.,: erillinen luettelo, esimerkiksi1,15,30minuuttikentässä.-: sisältävä väli, esimerkiksi9-17työaikaa varten./: askel (step), esimerkiksi*/15= 15 yksikön välein, tai0-30/5= 5 minuutin välein 0 ja 30 välillä.
Erityiset erikoismerkit (Quartz-laajennukset) (Java, AWS EventBridge, Spring): kielioppi kasvaa 6 tai 7
kenttään, jolloin alussa on sekuntisareke (0-59) ja toisinaan lopussa
vuosisarake (1970-2099). Quartz esittelee myös merkin ? (ei tiettyä
arvoa, kuukauden päivän ja viikonpäivän erottamiseen), L (last: kuukauden viimeinen päivä,
tai viimeinen perjantai merkinnällä 5L), W (lähin arkipäivä) ja #
(kuukauden N:s viikonpäivä, esimerkiksi 2#3 kolmannelle maanantaille). Quartz-lauseke
ei yleensä ole yhteensopiva UNIX-crontabin kanssa ja päinvastoin: tämä on suurin virhelähde, kun
cron-lauseke kopioidaan alustalta toiselle.
# UNIX / Vixie cron (5 kenttää)
0 9 * * 1-5
# Quartz (6 kenttää sekunneilla)
0 0 9 ? * MON-FRI
# Quartz (7 kenttää vuodella)
0 0 9 ? * MON-FRI 2026
Miksi cron-lauseke kannattaa dekoodata?
Merkinnän 0 0 * * * lukeminen on nopeaa. Merkinnän */7 2-5 1,15 * 1-5
lukeminen on huomattavasti hitaampaa. Kun lauseke ei ole triviaalinen, väärintulkinnan riski kasvaa,
ja cron-dekoodauksesta tulee osa katselmointiprosessia.
- Tuotannon virheenkorjaus: ymmärtää, miksi tehtävä käynnistyi klo 03.17 eikä klo 03.00, tai tunnistaa päällekkäisyydet kahden tehtävän välillä.
- Koodikatselmointi: varmistaa, että pull requestissa ehdotettu ajastin tekee juuri sen, mitä tekijä väittää, ilman tarvetta muistaa kunkin symbolin merkitystä.
- Ajastimien auditointi: tarkistaa Linuxin cron jobit tiedostoissa
/etc/crontabja/etc/cron.d/, Jenkins-liipaisimet, Kubernetes CronJobinspec.schedule-määritykset, AWS EventBridgen säännöt ja GCP Cloud Schedulerin tehtävät. - Perityn koodin migraatio: ottaa haltuun dokumentoimaton historiallinen
/etc/crontabja kartoittaa tehtävät ennen infrastruktuurin muutosta. - Perehdytys: antaa uudelle kehittäjälle mahdollisuuden lukea crontabia ilman, että hänen tarvitsee opetella kaikkia erikoismerkkejä heti kerralla.
Miten cron-dekooderia käytetään
Ohjeet crontab-lausekkeen dekoodaamiseen työkalulla:
- Liitä cron-lausekkeesi syöttökenttään (5 välilyönneillä erotettua kenttää).
- Määritä laskettavien seuraavien suorituskertojen määrä.
- Napsauta muunna aloittaaksesi cron-dekoodauksen: työkalu palauttaa selkokielisen lauseen, joka selittää liipaisun, sekä päivämäärillä varustetun luettelon seuraavista suorituksista.
- Varmista visuaalisesti, että päivämäärät vastaavat tarkoitustasi (aika, päivä, taajuus).
- Kopioi tulos kopiointipainikkeella liittääksesi sen tikettiin, PR:ään tai tekniseen dokumentaatioon.
Työkalu ei tyydy vain syntaktiseen parsintaan: se tarjoaa luonnollisen kielen cron-selityksen, mikä tekee siitä sekä cron-dekooderin että aikataulun vahvistimen.
Klassisia esimerkkejä cron-lausekkeista
Alla olevat mallit kattavat suurimman osan tuotannossa kohdattavista cron-aikatauluista. Ne ovat kaikki päteviä Linuxin crontabissa, Kubernetes CronJobissa, GitHub Actionsissa ja useimmissa sovellustason ajastimissa.
| Lauseke | Selkokielinen kuvaus |
|---|---|
* * * * * |
Joka minuutti |
0 * * * * |
Tasatunnein |
0 0 * * * |
Päivittäin keskiyöllä |
0 0 * * 0 |
Joka sunnuntai keskiyöllä |
*/15 * * * * |
15 minuutin välein |
0 9 * * 1-5 |
klo 9.00 maanantaista perjantaihin |
0 0 1 * * |
Kuukauden 1. päivä keskiyöllä |
0 0,12 * * * |
Keskiyöllä ja keskipäivällä joka päivä |
*/5 9-17 * * 1-5 |
5 minuutin välein työaikana |
30 2 1,15 * * |
Kuukauden 1. ja 15. päivä klo 2.30 |
Cron-tehtävän suorittamiseksi Linux-palvelimella muokataan käyttäjän crontabia komentoriviltä:
# muokkaa nykyisen käyttäjän crontabia
$ crontab -e
# listaa olemassa olevat tehtävät
$ crontab -l
# esimerkki lisätystä rivistä: päivittäinen varmuuskopiointi klo 3
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Esimerkki cron-muuntimen tulosteesta kohteelle */5 * * * * :
2026-05-05 00:00:00
2026-05-05 00:05:00
2026-05-05 00:10:00
2026-05-05 00:15:00
2026-05-05 00:20:00
...
Usein kysyttyjä kysymyksiä cron-dekooderista
Mitä eroa on UNIX cronilla ja Quartzilla?
UNIX/Vixie cron käyttää viittä kenttää (minuutista viikonpäivään), ilman sekuntitarkkuutta, eikä siinä ole
natiivia käsitettä « kuukauden viimeinen päivä ». Quartz (Java, Spring, AWS EventBridge) lisää
sekuntisarakkeen alkuun, joskus vuosisarakkeen loppuun, ja useita symboleja
(?, L, W, #), joita ei ole Linuxin crontabissa.
Kuusikenttäinen Quartz-cron-lauseke ei siis ole suoraan siirrettävissä
/etc/crontabiin ja päinvastoin. Meidän cron-dekooderimme kohdistuu
viisikenttäiseen muotoon, joka kattaa useimmat ajoitusohjelmat.
Miten suoritetaan cron-tehtävä 5 minuutin välein?
Askeleella / minuuttikentässä:
*/5 * * * * /usr/local/bin/check-health.sh
Tämä crontab-lauseke käynnistää skriptin minuuteilla 0, 5, 10, 15... joka tunti, joka päivä.
Rajoittaaksesi sen työaikoihin maanantaista perjantaihin, lisää rajoitukset tunti- ja viikonpäiväkenttiin:
*/5 9-17 * * 1-5.
Mitä tähti (*) tarkoittaa cron-lausekkeessa?
Tähti tarkoittaa mitä tahansa arvoa: se vastaa kaikkia kentän sallittuja arvoja. Lausekkeessa
0 0 * * * kolme tähteä tarkoittavat « mikä tahansa kuukauden päivä, mikä tahansa kuukausi,
mikä tahansa viikonpäivä ». Yhdistettynä kahteen ensimmäiseen kenttään, jotka on asetettu arvoon
0, saadaan « joka päivä keskiyöllä ». Tähti voidaan myös yhdistää askeleeseen:
*/15 minuuttikentässä = 15 minuutin välein.
Onko crontabilla aikavyöhykettä?
Oletuksena palvelimen aikavyöhyke. Linuxin crontabissa se on järjestelmän aikavyöhyke (usein UTC
VPS-palvelimilla ja konteissa). GitHub Actions pakottaa UTC:n. Kubernetes CronJob käyttää ohjaimen
aikavyöhykettä, joka on konfiguroitavissa spec.timeZone-asetuksella versiosta 1.27 alkaen.
AWS EventBridge arvioi lausekkeet UTC:nä. Sovellustason ajoittajat (Symfony Scheduler, Quartz, Airflow)
sallivat usein erillisen aikavyöhykkeen asettamisen kullekin tehtävälle. Jos olet epävarma, tarkista
date kohdepalvelimelta ja vertaa sitä cron-muuntimen tulosteeseen.
Cron-tehtävä vs at-komento: kumpi valita?
cron-tehtävää käytetään toistuvan tehtävän suorittamiseen aikataulun mukaisesti.
at-komentoa käytetään komennon suorittamiseen vain kerran tiettynä ajankohtana.
Käytä cronia päivittäisiin varmuuskopiointeihin, lokien rotaatioon tai säännöllisiin API-kutsuihin.
Käytä at-komentoa kertaluonteiseen viivästettyyn operaatioon (« suorita tämä käyttöönotto klo 22 tänä
iltana »):
$ echo "/usr/local/bin/deploy.sh" | at 22:00
Miten testata cron-lauseketta käynnistämättä sitä?
Tämä on juuri tämän cron-muuntimen tehtävä: se laskee seuraavat N suoritusta nykyhetkestä
alkaen käynnistämättä mitään tehtävää. Näet heti, suoriutuuko crontab-lausekkeesi klo
03.00 suunnitellusti vai vahingossa klo 03.17. Ennen tehtävän asentamista voit also testata skriptiä
yksinään (bash -x script.sh) ja tarkistaa crontab-tiedoston syntaksin komennolla
crontab -T tiedosto sitä tukevissa jakeluissa.
Mitä tapahtuu, jos sekä kuukauden päivä että viikonpäivä on asetettu?
Vixie cronissa (Linux) sääntö on looginen TAI: tehtävä suoritetaan, jos jompikumpi
kentistä täsmää. Tämä on epäintuitiivista ja altista virheille. Quartz käyttää JA-sääntöä,
mistä johtuen on otettu käyttöön symboli ? ilmoittamaan nimenomaan « ei rajoitusta ».
Yleissääntönä on asettaa vain toinen näistä kahdesta kentästä.
Pyyntöesimerkki
curl -X POST https://cdrn.fr/api/v1/tools/cron-converter/execute \
-H "Content-Type: application/json" \
-d '{"cron":"...","number_next_date":1}'
Syöteskeema
| Kenttä | Tyyppi | Pakollinen | Oletus |
|---|---|---|---|
cron |
string | ✓ | – |
number_next_date |
integer | ✓ | – |
Päätepisteet
GET https://cdrn.fr/api/v1/tools- listaa kaikki saatavilla olevat työkalutGET https://cdrn.fr/api/v1/tools/cron-converter- hakee tämän työkalun skeemanPOST https://cdrn.fr/api/v1/tools/cron-converter/execute- suorittaa tämän työkalun JSON-payloadilla