Utilia

Cron-lausekkeen rakentaja

Rakenna cron-lauseke kenttä kerrallaan, lue se selkokielellä, katso seuraavat ajot aikavyöhykkeittäin ja muunna se systemd-, Quartz- tai AWS-muotoon.

Rakentaja

KenttäTilaArvo
Minuutti0–59
Tunti0–23
Kuukauden päivä1–31, L
Kuukausi1–12 tai JAN–DEC
Viikonpäivä0–7 (0 ja 7 = sunnuntai) tai SUN–SAT

Näin rakennat cron-lausekkeen

  1. Kirjoita tai liitä lauseke kenttään Cron-lauseke tai valitse se kohdasta Esiasetukset. Myös makrot, kuten @daily tai @weekly, kelpaavat.
  2. Tai käytä Rakentajaa: valitse jokaiselle kentälle Tila (Jokainen, Joka N:s, Tietyt arvot, Väli tai Oma) ja täytä Arvo. Lauseke päivittyy sitä mukaa, ja lausekkeen muokkaaminen päivittää rakentajan.
  3. Rastita Lisää sekuntikenttä (6 kenttää), jos ajastimesi tukee sekunteja.
  4. Lue aikataulu Selkokielellä (sivun kielellä, kun kuvauskirjasto sen tukee, muuten englanniksi) ja tarkista sitten Seuraavat ajot -luettelo. Valitse työn ajavan palvelimen Aikavyöhyke ja se, Kuinka monta ajoa luetellaan.
  5. Kopioi lauseke Kopioi-painikkeella tai käytä jotakin Muista muodoista.

Virheet selitetään kenttäkohtaisesti, esimerkiksi ”Minuutti: 61 on sallitun alueen ulkopuolella (0–59)”, joten tiedät tarkalleen, mitä korjata.

Viisi cron-kenttää

Tavallisessa (Vixie) cron-rivissä on viisi kenttää ja sen perässä komento:

Kenttä Sallitut arvot
Minuutti 0–59
Tunti 0–23
Kuukauden päivä 1–31
Kuukausi 1–12 tai JAN–DEC
Viikonpäivä 0–7 (0 ja 7 ovat sunnuntai) tai SUN–SAT

Jokainen kenttä hyväksyy * (jokainen arvo), listan 1,15, välin 9-17, askeleen */15 (joka 15. yksikkö) tai välin askeleella 0-30/10. Näin ollen */15 9-17 * * 1-5 tarkoittaa joka 15. minuutti klo 9:00–17:45 maanantaista perjantaihin.

Yksi sääntö yllättää monet: kun sekä Kuukauden päivä että Viikonpäivä on rajattu, perinteinen cron ajaa, kun jompikumpi täsmää. 0 0 13 * 5 ajetaan jokaisena 13. päivänä ja jokaisena perjantaina, ei vain perjantai 13. päivänä. Työkalu näyttää tässä tapauksessa varoituksen.

Seuraavat ajoajat ja aikavyöhykkeet

Cron käyttää koneen kelloa tai crontabin CRON_TZ/TZ-asetusta. Seuraavat ajot -luettelo lasketaan valitsemallesi aikavyöhykkeelle kesäaikaan siirtymät mukaan lukien: keväällä klo 2:30 ajettavaksi asetettu työ voi jäädä väliin, ja syksyllä se voi toteutuksesta riippuen ajaa kerran tai kahdesti. Jos työn on ajettava täsmälleen kerran, suosi aikoja klo 1:00–3:00 ulkopuolelta tai käytä UTC:tä.

Vixie cron, systemd-ajastimet, Quartz ja AWS

  • systemd-ajastimet käyttävät OnCalendar=-asetusta eri syntaksilla: Mon..Fri *-*-* 09..17:00/15:00. Viikonpäivä- ja päivämääräehdot yhdistetään AND-operaattorilla, ei OR:lla, joten joillakin cron-lausekkeilla ei ole täsmälleen vastaavaa.
  • Quartz ja Spring asettavat sekuntikentän ensimmäiseksi ja voivat lisätä vuosikentän. Toisen kahdesta päiväkentästä on oltava ?, ja Quartz numeroi viikonpäivät 1–7 sunnuntaista alkaen toisin kuin cronin 0–6. Työkalu kirjoittaa viikonpäivät nimillä (MON-FRI) tämän ansan välttämiseksi.
  • AWS EventBridge käyttää muotoa cron(minuutit tunnit päivä kuukausi viikonpäivä vuosi): kuusi kenttää, ei sekunteja, ? toisessa päiväkentässä ja vuosi lopussa.

Tavallisessa cronissa ei ole sekuntikenttää. Sekunteja sisältävää 6-kenttäistä muotoa tukevat monet kirjastot (node-cron, Spring, Quartz), mutta järjestelmän crontab ei.

Usein kysytyt kysymykset

Miten ajan työn joka 5. minuutti?

Käytä */5 * * * *. Työ ajetaan minuuteilla 0, 5, 10… joka tunti.

Miten ajan työn kuukauden viimeisenä päivänä?

Monet ajastimet hyväksyvät L-merkin kuukauden päivän kentässä: 0 18 L * *. Tavallisessa Vixie cronissa aja työ päivittäin päivinä 28–31 ja testaa skriptissä, onko huominen 1. päivä.

Mitä @reboot tekee?

Se ajaa komennon kerran, kun cron-daemon käynnistyy. Sillä ei ole aikataulua, joten työkalu ei voi luetella sen ajoaikoja.

Miksi työni ei aja näytettynä aikana?

Tarkista palvelimen aikavyöhyke, käyttäjän crontab verrattuna tiedostoon /etc/crontab (jossa on ylimääräinen käyttäjäkenttä) ja PATH: cron käynnistyy minimaalisessa ympäristössä.

Onko 0 vai 7 sunnuntai?

Molemmat. Viikonpäivän kentässä 0 ja 7 tarkoittavat sunnuntaita, 1 on maanantai ja 6 lauantai.