Utilia

Ndërtuesi i shprehjeve cron

Ndërto një shprehje cron fushë pas fushe, lexoje me fjalë të thjeshta, shih ekzekutimet e radhës në çdo zonë kohore dhe konvertoje në systemd, Quartz ose AWS.

Ndërtuesi

FushaMënyraVlera
Minuta0–59
Ora0–23
Dita e muajit1–31, L
Muaji1–12 ose JAN–DEC
Dita e javës0–7 (0 dhe 7 = e diel) ose SUN–SAT

Si të ndërtosh një shprehje cron

  1. Shkruaj ose ngjit një shprehje te Shprehja cron, ose zgjidh një nga Paravendosje. Pranohen edhe makrot si @daily ose @weekly.
  2. Ose përdor Ndërtuesin: për çdo fushë zgjidh një Mënyrë (Çdo, Çdo N, Vlera të caktuara, Interval ose Vetjake) dhe plotëso Vlerën. Shprehja përditësohet gjatë punës, dhe ndryshimi i shprehjes përditëson ndërtuesin.
  3. Shëno Shto një fushë sekondash (6 fusha) nëse planifikuesi yt mbështet sekonda.
  4. Lexo orarin Me fjalë të thjeshta dhe pastaj shiko listën Ekzekutimet e radhës. Zgjidh Zonën kohore të serverit që ekzekuton punën dhe Sa ekzekutime të listohen. Përshkrimi i orarit është në anglisht.
  5. Kopjo shprehjen me Kopjo, ose përdor një nga Formate të tjera.

Gabimet shpjegohen fushë pas fushe, për shembull “Minuta: 61 është jashtë intervalit (0–59)”, ndaj e di saktësisht çfarë duhet korrigjuar.

Pesë fushat e cron

Një rresht cron standard (Vixie) ka pesë fusha, pastaj komandën:

Fusha Vlerat e lejuara
Minuta 0–59
Ora 0–23
Dita e muajit 1–31
Muaji 1–12 ose JAN–DEC
Dita e javës 0–7 (0 dhe 7 janë e diel) ose SUN–SAT

Çdo fushë pranon * (çdo vlerë), një listë 1,15, një interval 9-17, një hap */15 (çdo 15 njësi) ose një interval me hap 0-30/10. Pra */15 9-17 * * 1-5 do të thotë çdo 15 minuta nga ora 9:00 deri në 17:45, nga e hëna në të premte.

Një rregull që habit shumëkënd: kur janë të kufizuara edhe Dita e muajit, edhe Dita e javës, cron-i klasik ekzekutohet kur përputhet njëra prej tyre. 0 0 13 * 5 ekzekutohet çdo të 13-n dhe çdo të premte, jo vetëm të premten e 13-të. Mjeti shfaq një paralajmërim në atë rast.

Ekzekutimet e radhës dhe zonat kohore

Cron përdor orën e makinës, ose cilësimin CRON_TZ/TZ të crontab-it. Lista Ekzekutimet e radhës llogaritet për zonën kohore që zgjedh, përfshirë ndryshimet e orës verore: gjatë ndryshimit të pranverës një punë e caktuar në 2:30 mund të anashkalohet, ndërsa në vjeshtë mund të ekzekutohet një ose dy herë, sipas zbatimit. Për punët që duhet të ekzekutohen saktësisht një herë, preferoji orët jashtë 1:00–3:00 ose përdor UTC. Datat e ekzekutimeve shfaqen sipas gjuhës së faqes.

Vixie cron, kohëmatësit systemd, Quartz dhe AWS

  • Kohëmatësit systemd përdorin OnCalendar= me sintaksë tjetër: Mon..Fri *-*-* 09..17:00/15:00. Kushtet e ditës së javës dhe të datës kombinohen me AND, jo OR, ndaj disa shprehje cron nuk kanë ekuivalent të saktë.
  • Quartz dhe Spring vendosin një fushë sekondash në fillim dhe mund të shtojnë një fushë viti. Njëra nga dy fushat e ditës duhet të jetë ?, dhe Quartz i numëron ditët e javës 1–7 nga e diela, ndryshe nga 0–6 i cron-it. Mjeti i shkruan ditët e javës me emra (MON-FRI) për të shmangur këtë kurth.
  • AWS EventBridge përdor cron(minuta orë ditë muaj ditë-jave vit): gjashtë fusha, pa sekonda, një ? në njërën fushë dite dhe një vit në fund.

Cron-i standard nuk ka fushë sekondash. Forma me 6 fusha me sekonda mbështetet nga shumë biblioteka (node-cron, Spring, Quartz), por jo nga crontab-i i sistemit.

Pyetje të shpeshta

Si ta ekzekutoj një punë çdo 5 minuta?

Përdor */5 * * * *. Puna ekzekutohet në minutat 0, 5, 10… të çdo ore.

Si ta ekzekutoj një punë ditën e fundit të muajit?

Shumë planifikues pranojnë L në fushën e ditës së muajit: 0 18 L * *. Me Vixie cron të thjeshtë, ekzekuto çdo ditë më 28–31 dhe testo në skript nëse nesër është e para e muajit.

Çfarë bën @reboot?

E ekzekuton komandën një herë, kur nis demoni cron. Nuk ka orar, ndaj mjeti nuk mund të listojë kohët e ekzekutimit për të.

Pse puna ime nuk ekzekutohet në kohën e treguar?

Kontrollo zonën kohore të serverit, crontab-in e përdoruesit kundrejt /etc/crontab (që ka një fushë shtesë përdoruesi) dhe PATH: cron nis me një mjedis minimal.

A është 0 apo 7 e diel?

Të dyja. Në fushën e ditës së javës, 0 dhe 7 do të thotë e diel, 1 është e hëna dhe 6 është e shtuna.