Utilia

Cron išraiškų generatorius

Sudaryk cron išraišką laukas po lauko, pamatyk kitus paleidimo laikus bet kurioje laiko juostoje ir konvertuok į systemd, Quartz ar AWS formatą.

Konstruktorius

LaukasRežimasReikšmė
Minutė0–59
Valanda0–23
Mėnesio diena1–31, L
Mėnuo1–12 arba JAN–DEC
Savaitės diena0–7 (0 ir 7 = sekmadienis) arba SUN–SAT

Kaip sudaryti cron išraišką

  1. Įrašyk ar įklijuok išraišką į Cron išraiška arba pasirink ją iš Šablonai. Makrokomandos, pavyzdžiui, @daily ar @weekly, taip pat priimamos.
  2. Arba naudok Konstruktorius: kiekvienam laukui pasirink Režimas (Kas, Kas N, Konkrečios reikšmės, Intervalas ar Kita) ir užpildyk Reikšmė. Išraiška atsinaujina tau dirbant, o pakeitus išraišką atsinaujina konstruktorius.
  3. Pažymėk Pridėti sekundžių lauką (6 laukai), jei tavo planuoklis palaiko sekundes.
  4. Perskaityk tvarkaraštį skiltyje Paprastais žodžiais, tada peržiūrėk sąrašą Kiti paleidimai. Pasirink užduotį vykdančio serverio Laiko juosta ir Kiek rodyti paleidimų.
  5. Nukopijuok išraišką mygtuku Kopijuoti arba naudok vieną iš Kiti formatai.

Tvarkaraščio aprašymas paprastais žodžiais pateikiamas anglų kalba: lietuviškos šios bibliotekos kalbos nėra. Laiko ir datų formatai kitų paleidimų sąraše naudoja puslapio kalbą. Klaidos paaiškinamos laukas po lauko, pavyzdžiui, „Minutė: 61 už ribų (0–59)“, todėl tiksliai žinai, ką taisyti.

Penki cron laukai

Standartinė (Vixie) cron eilutė turi penkis laukus, tada komandą:

Laukas Leidžiamos reikšmės
Minutė 0–59
Valanda 0–23
Mėnesio diena 1–31
Mėnuo 1–12 arba JAN–DEC
Savaitės diena 0–7 (0 ir 7 yra sekmadienis) arba SUN–SAT

Kiekvienas laukas priima * (kiekviena reikšmė), sąrašą 1,15, intervalą 9-17, žingsnį */15 (kas 15 vienetų) arba intervalą su žingsniu 0-30/10. Taigi */15 9-17 * * 1-5 reiškia kas 15 minučių nuo 9:00 iki 17:45, nuo pirmadienio iki penktadienio.

Viena taisyklė daug ką nustebina: kai apribotos ir Mėnesio diena, ir Savaitės diena, klasikinis cron veikia, kai atitinka bent viena iš jų. 0 0 13 * 5 vykdoma kiekvieną 13 dieną ir kiekvieną penktadienį, o ne tik penktadienį, patekusį į 13 d. Tokiu atveju įrankis rodo įspėjimą.

Kito paleidimo laikai ir laiko juostos

Cron naudoja mašinos laikrodį arba crontab nustatymą CRON_TZ/TZ. Sąrašas Kiti paleidimai skaičiuojamas pasirinktai laiko juostai, įskaitant vasaros laiko pokyčius: pavasarį užduotis, nustatyta 2:30, gali būti praleista, o rudenį, priklausomai nuo realizacijos, gali įvykti vieną ar du kartus. Užduotims, kurios turi įvykti lygiai kartą, rinkis laikus ne 1:00–3:00 intervale arba naudok UTC.

Vixie cron, systemd laikmačiai, Quartz ir AWS

  • systemd laikmačiai naudoja OnCalendar= su kitokia sintakse: Mon..Fri *-*-* 09..17:00/15:00. Savaitės dienos ir datos sąlygos jungiamos per IR, o ne per ARBA, todėl kai kurios cron išraiškos tikslaus atitikmens neturi.
  • Quartz ir Spring pirmą deda sekundžių lauką ir gali pridėti metų lauką. Vienas iš dviejų dienų laukų turi būti ?, o Quartz savaitės dienas numeruoja 1–7 nuo sekmadienio, skirtingai nei cron 0–6. Įrankis savaitės dienas rašo pavadinimais (MON-FRI), kad išvengtų šių spąstų.
  • AWS EventBridge naudoja cron(minutės valandos diena mėnuo savaitės_diena metai): šeši laukai, be sekundžių, ? viename dienos lauke ir metai gale.

Standartinis cron sekundžių lauko neturi. Šešių laukų formą su sekundėmis palaiko daug bibliotekų (node-cron, Spring, Quartz), bet ne sistemos crontab.

Dažnai užduodami klausimai

Kaip vykdyti užduotį kas 5 minutes?

Naudok */5 * * * *. Užduotis vykdoma kiekvienos valandos 0, 5, 10… minutę.

Kaip vykdyti užduotį paskutinę mėnesio dieną?

Daugelis planuoklių priima L mėnesio dienos lauke: 0 18 L * *. Su paprastu Vixie cron vykdyk kasdien 28–31 dienomis, o scenarijuje patikrink, ar rytoj yra 1 diena.

Ką daro @reboot?

Jis vykdo komandą vieną kartą, kai paleidžiamas cron demonas. Jis neturi tvarkaraščio, todėl įrankis negali išvardyti jo paleidimų.

Kodėl mano užduotis nevykdoma rodytu laiku?

Patikrink serverio laiko juostą, naudotojo crontab ir /etc/crontab (kuriame yra papildomas naudotojo laukas) skirtumą bei PATH: cron startuoja su minimalia aplinka.

Ar sekmadienis yra 0, ar 7?

Abu. Savaitės dienos lauke 0 ir 7 reiškia sekmadienį, 1 – pirmadienį, o 6 – šeštadienį.