Mikä tämä työkalu on?
Cron-lauseke on kompakti, viisikenttäinen aikataulumerkkijono — `minuutti tunti kuukauden_päivä kuukausi viikonpäivä` — jota käyttää Unixin `cron`-daemon ja käytännössä jokainen sen mukaan mallinnettu työn ajastaja (crontab, Kubernetes CronJobit, GitHub Actionsin `schedule:`, Airflow, Jenkins). Jokainen kenttä hyväksyy tähden (`*`, tarkoittaa "mikä tahansa arvo"), tietyn numeron, pilkuin erotellun listan (`1,15,30`), välin (`9-17`), askeleen (`*/15`, tarkoittaa "joka 15. yksikkö"), tai — kuukaudelle ja viikonpäivälle — kolmikirjaimisen nimen (`JAN`, `MON`) numeron sijaan.
Tämän syntaksin kanoninen määrittely on Linux crontab(5) man-sivu, joka dokumentoi täsmälleen samat viisi kenttää, erikoismerkit (`* , - /`) ja kahdeksan `@`-lyhennemerkkijonoa (`@reboot`, `@yearly`/`@annually`, `@monthly`, `@weekly`, `@daily`/`@midnight`, `@hourly`), joita useimmat cron-toteutukset, mukaan lukien Vixie cron (versio useimmissa Linux-jakeluissa), tukevat aliaksina yleisille aikatauluille.
Tämä työkalu toteuttaa juuri tuon standardin 5-kentän muodon — muodon, jonka kirjoittaisit suoraan `crontab -e`:hen Linux- tai macOS-palvelimella, tai Kubernetes CronJobin `schedule:`-kenttään. Se ei toteuta Quartz cron -syntaksia, joka on eri, 6- tai 7-kenttäinen muoto, jota käyttävät Java Quartz Scheduler ja jotkin valmistajien työkalut (katso vertailuosio alta, milloin tarvitset sitä sen sijaan).
Miksi käyttää sitä?
- Peritsit juuri tuotanto-crontabin, jossa on rivi kuten `17 3 * * 0` ilman selittävää kommenttia — liitä se tähän ennen kuin koskethan mihinkään nähdäksesi, että se on itse asiassa "joka sunnuntai klo 3:17", ei kirjoitusvirhe.
- Kirjoitat GitHub Actions -työnkulkua schedule:-cron-liipaisimella etkä ole varma tarkoittaako `0 */6 * * *` todella joka 6. tunti keskiyöstä alkaen — tarkista seuraavat 5 ajoaikaa ennen YAML:in commitointia.
- Asetit cron-työn sekä kuukauden päivä- että viikonpäivärajoituksella, kuten `0 4 8 * MON`, ja työ käynnistyy päivinä joita et odottanut — tämä työkalu paljastaa OR-ei-AND-unionin käyttäytymisen, joka kompastuttaa lähes kaikki ensimmäisellä kerralla.
- Rakennat Kubernetes CronJobia ja tarvitset tarkan `schedule:`-merkkijonon "joka 15. minuutti, vain työaikana, arkisin" ilman kenttien käsin laskemista — käytä pudotusvalikkorakentajaa sen käsin kirjoittamisen sijaan.
- Et ole varma käyttääkö ajastimen konfiguraatio standardia cronia vai Quartz cronia, koska dokumentaatio vain sanoo "cron expression" — tarkista onko siinä 5 kenttää (tämä työkalu) vai 6-7 kenttää `?`/`L`/`W`/`#`-merkeillä (Quartz) ennen kuin tuhlaat aikaa muotoristiriidan vianetsintään.
- 100% paikallinen: aikataululogiikkasi ei koskaan poistu selaimestasi.
Käyttöohje
- Kääntääksesi lausekkeen: kirjoita tai liitä 5-kentän cron-merkkijono (tai @-lyhenne kuten `@daily`) syöttökenttään.
- Lue selkokielinen kuvaus ja seuraavat 5 laskettua ajoaikaa sen alla — molemmat päivittyvät reaaliajassa kirjoittaessasi.
- Rakentaaksesi lausekkeen sen sijaan: avaa Rakentaja-osio, valitse tila (joka / joka N. / tietty arvo) jokaiselle viidelle kentälle, ja klikkaa "Luo lauseke".
- Luotu lauseke täyttää yllä olevan syöttökentän ja syöttyy heti kuvaus- ja seuraavat-ajoajat-paneeleihin.
- Käytä alareunan syntaksiselitettä pikaviitteenä merkeille `*`, `,`, `-` ja `/`.
- Kopioi lopullinen lauseke Kopioi-painikkeella ja liitä se crontabiin, CI-konfiguraatioon tai ajastimeen.
Esimerkki
Syöte
*/15 9-17 * * MON-FRITuloste
Klo 09:00, 09:15, 09:30, 09:45, 10:00 ... 17:45, maanantaisin, tiistaisin, keskiviikkoisin, torstaisin, perjantaisinTämä lauseke ajaa joka 15. minuutti, mutta vain klo 09:00–17:59 välillä, ja vain arkipäivinä — tyypillinen "työajan" pollausaikataulu.
Standardi cron vs Quartz cron
"Cron-syntaksi" ei ole yksi universaali standardi — kaksi useimmin vastaan tulevaa muotoa eroavat kenttien määrässä ja siinä mitä muutama erikoismerkki tarkoittaa. Käytä tätä taulukkoa varmistaaksesi, että käytät oikeaa kohdeajastimeesi.
| Näkökohta | Standardi cron (tämä työkalu) | Quartz cron |
|---|---|---|
| Kenttien määrä | 5 (minuutti tunti dom kuukausi dow) | 6 tai 7 (lisää sekunnit, ja valinnaisen vuoden) |
| Käyttäjät | Linux/macOS crontab, Kubernetes CronJob, GitHub Actions | Java Quartz Scheduler, jotkin yritysajastimet |
| Kuukauden päivä + viikonpäivä molemmat asetettu | Täsmää JOMPAAKUMPAA (unioni/TAI) | Vaatii `?`-merkin toiseen kahdesta kentästä — ei voi asettaa molempia arvoon samanaikaisesti |
| Erikoismerkit lisäksi | Ei mitään `* , - /` lisäksi | Lisää `?`, `L` (viimeinen), `W` (lähin arkipäivä), `#` (kuukauden n. viikonpäivä) |
| Sekuntitason ajastus | Ei tuettu | Tuettu (ensimmäinen kenttä) |
Yleiset aikataulureseptit
Kourallinen lausekkeita kattaa suurimman osan käytännön ajastustarpeista — nämä kannattaa tunnistaa suoraan sen sijaan että ne johtaisi joka kerta uudelleen.
- `*/5 * * * *` — joka 5. minuutti, koko päivän. Yleinen kunto-tarkistuksille ja kevyille pollaustöille.
- `0 */6 * * *` — joka 6. tunti, tasatunnein (00:00, 06:00, 12:00, 18:00). Yleinen oletus jaksottaisille synkronointi- tai siivoustehtäville.
- `0 2 * * *` — kerran päivässä klo 2 yöllä. Klassinen ajankohta yöllisille varmuuskopioille, kun liikenne on pienimmillään.
- `0 9 * * 1-5` — klo 9, vain maanantaista perjantaihin. Standardi vain-työaikaisille raporteille tai koosteille.
- `0 0 1 * *` — keskiyöllä joka kuukauden 1. päivä, vastaa `@monthly`-lyhennettä. Käytetään kuukausittaisiin laskutusajoihin tai käyttörajojen nollauksiin.
- `*/15 9-17 * * MON-FRI` — joka 15. minuutti, mutta vain työaikana arkisin — yhdistää askeleen, välin ja viikonpäivävälin yhteen lausekkeeseen.
Aiheeseen liittyvät työkalut
Työskenteletkö konfiguraatioiden, aikataulujen tai aikaleimojen kanssa? Nämä työkalut sopivat hyvin cron-generaattorin kanssa.
→ Aikaleimamuunnin · Maailmankellomuunnin · Päivämäärälaskuri
Usein kysytyt kysymykset
Mikä on cron-lauseke?
Cron-lauseke on 5-kentän tekstimerkkijono (`minuutti tunti kuukauden_päivä kuukausi viikonpäivä`), joka määrittää toistuvan aikataulun Unixin `cron`-daemonille ja yhteensopiville ajastajille. Jokainen kenttä voi olla `*` (mikä tahansa arvo), numero, pilkuin erotettu lista, väli (`a-b`), tai askel (`*/n`); kuukausi- ja viikonpäiväkentät hyväksyvät myös kolmikirjaimisia nimiä kuten `JAN` tai `MON`. Täydellinen määrittely on dokumentoitu crontab(5) man-sivulla.
Mitä tapahtuu kun sekä kuukauden päivä että viikonpäivä on rajoitettu?
Tämä on tunnettu cron-sudenkuoppa: POSIX cron -semantiikan mukaan, kun SEKÄ kuukauden päivä- että viikonpäiväkenttä ovat rajoitettuja (ei `*`), työ ajetaan jos JOMPIKUMPI ehto täyttyy — se on unioni (TAI), ei leikkaus (JA). Esimerkiksi `0 4 8 * MON` ajaa klo 4:00 sekä joka kuukauden 8. päivä ETTÄ joka maanantai, ei vain maanantaisin jotka sattuvat olemaan 8. päivä. Tämä työkalu toteuttaa täsmälleen tämän unionikäyttäytymisen laskiessaan seuraavia ajoaikoja.
Standardi cron vs Quartz cron — kumman tarvitsen?
Tämä työkalu tuottaa standardin 5-kentän POSIX/Vixie cron -syntaksin — muodon, jota käyttävät Linux/macOS `crontab`, Kubernetes CronJobit, GitHub Actionsin `schedule:` ja useimmat Unix-johdannaiset työajajat. Quartz cron, jota käyttävät Java Quartz Scheduler ja sen päälle rakennetut työkalut (jotkin yritysajastimet, vanhemmat Spring Batch -konfiguraatiot), on eri, 6- tai 7-kentän muoto, joka lisää sekuntikentän alkuun ja vaihtaa joidenkin erikoismerkkien merkityksen (`?` "ei tiettyä arvoa" päiväkentissä, `L`/`W`/`#` "viimeinen päivä", "lähin arkipäivä" ja "kuukauden n. viikonpäivä"). Jos ajastimesi kenttämäärä on 6 tai 7, tai dokumentaatiosi mainitsee `?`, `L`, `W` tai `#`, tarvitset Quartz-spesifisen työkalun — tämän generaattorin lausekkeet eivät jäsenny siellä oikein. Jos kenttiä on tarkalleen 5 (tai `@daily`-tyylinen lyhenne), olet oikeassa paikassa.
Mitä tarkoittavat lyhenteet @yearly, @monthly, @weekly, @daily ja @hourly?
Nämä ovat epästandardeja mutta laajalti tuettuja lyhennemerkkijonoja, jotka laajenevat yleisiksi 5-kentän lausekkeiksi: `@yearly`/`@annually` = `0 0 1 1 *` (kerran vuodessa, 1. tammikuuta keskiyöllä), `@monthly` = `0 0 1 * *` (joka kuukauden 1. päivä keskiyöllä), `@weekly` = `0 0 * * 0` (joka sunnuntai keskiyöllä), `@daily`/`@midnight` = `0 0 * * *` (joka päivä keskiyöllä), `@hourly` = `0 * * * *` (jokaisen tunnin alussa). Tämä työkalu jäsentää ne kaikki ja käsittelee niitä täsmälleen laajennettuina 5-kentän vastineina.
Voinko käyttää päivien/kuukausien nimiä numeroiden sijaan?
Kyllä. Kuukausikenttä hyväksyy kolmikirjaimiset nimet `JAN`–`DEC`, ja viikonpäiväkenttä hyväksyy `SUN`–`SAT` (kirjainkoosta riippumatta), vaihtoehtoisesti numeroiden kanssa. Viikonpäivänumerot menevät 0-6, jossa 0 = sunnuntai; jotkin toteutukset hyväksyvät myös 7:n sunnuntaiksi, minkä tämä työkalu normalisoi 0:ksi. Välit ja listat toimivat myös nimillä, esim. `MON-FRI` tai `JAN,JUN,DEC`.
Lähetetäänkö cron-lausekkeeni palvelimelle?
Ei. Jäsennys, selkokielinen kuvaus ja seuraavien ajoaikojen laskenta tapahtuvat kaikki paikallisesti JavaScriptillä selaimessasi. Mikään kirjoittamasi tai luomasi ei koskaan poistu laitteeltasi.
Missä aikavyöhykkeessä seuraavat ajoajat lasketaan?
Tämä työkalu laskee seuraavat ajoajat selaimesi paikallisessa aikavyöhykkeessä, koska standardi cronilla itsellään ei ole sisäänrakennettua aikavyöhykekenttää — todellinen daemon tai ajastin, joka ajaa työsi, käyttää mitä tahansa aikavyöhykettä isäntäjärjestelmässään (tai, GitHub Actionsille ja vastaaville pilviajastimille, UTC:tä) on asetettu. Jos palvelimesi aikavyöhyke poikkeaa selaimesi aikavyöhykkeestä, siirrä näytettyjä aikoja mielessäsi, tai tarkista ajastimesi aikavyöhykekonfiguraatio erikseen.
Miten ajastan työn ajettavaksi vain kuukauden viimeisenä päivänä?
Standardin 5-kentän cronilla ei ole suoraa "kuukauden viimeinen päivä" -syntaksia — se on yksi ominaisuuksista, joita Quartz cron lisää `L`-merkillään. Standardissa cronissa yleinen kiertotapa on ajastaa työ joka päivä 28.-31. (`0 0 28-31 * *`) ja antaa itse skriptin tarkistaa, vieritäänkö huomisen päivämäärä uuteen kuukauteen ennen varsinaisen logiikan ajamista.
Voinko ajastaa jotain epätavallisella välillä, kuten joka 10. minuutti?
Kyllä, askel-syntaksilla: `*/10 * * * *` ajaa joka 10. minuutti alkaen :00:sta (siis :00, :10, :20, :30, :40, :50). Muista, että askeleet laskevat aina kentän minimiarvosta, joten `*/10` minuuttikentässä ei koskaan osu :05 tai :15 -kohtaan — jos tarvitset tällaisen siirtymän, käytä sen sijaan eksplisiittistä pilkkulistaa, esim. `5,15,25,35,45,55`.
Miksi cron-työni näyttää ajavan kahdesti kerralla, tai ei ollenkaan, kesäajan vaihtumisen ympärillä?
Standardi cron ajastaa isäntäjärjestelmän seinäkelloajan mukaan, ja kesäajan siirtymät luovat joko ohitetun tunnin (kevätsiirto) tai toistetun tunnin (syyssiirto). Ohitetulle tai toistetulle tunnille ajastettu työ voi ajaa sinä päivänä nolla tai kaksi kertaa riippuen cron-daemonisi tarkasta käsittelystä. Kriittisten infrastruktuurityöiden ajaminen UTC:hen asetetuilla palvelimilla (jossa ei ole kesäaikaa) välttää tämän kokonaan.