Aprēķināt nākamos cron izteiksmes izpildes

analizē un parāda cron konfigurācijas nākamos izpildes datumus

Kas ir krona izteiksme?

Cron izteiksme ir īsa virkne, kas apraksta atkārtošanos laika gaitā. The formātā, kas mantots no Unix, ir pieci lauki, kas atdalīti ar atstarpēm: minūte, stunda, mēneša diena, mēnesis un nedēļas diena. Šī sintakse radās kopā ar dēmonu cron, ko 1970. gados izveidoja Braiens Kernigans, pēc tam vispārināja ar Vixie cron (1987), ko atbalsta visi mūsdienu Linux un macOS izplatījumi. Mūsdienās ir tāda pati sintakse atrodams lielākajā daļā mākoņa plānotāju (AWS EventBridge, GCP Cloud Scheduler, Azure Logic Apps) un CI/CD (GitHub Actions, GitLab CI, Jenkins).

┌──── minūte (0–59)
│ ┌── stunda (0-23)
│ │ ┌── mēneša diena (1-31)
│ │ │ ┌── mēneši (1–12. JAN–DEC.)
│ │ │ │ ┌── nedēļas diena (0–7 vai SV–SET, 0 un 7 = svētdiena)
│ │ │ │ │
* * * * *

Tāpēc pareizi izveidota cron izteiksme definē precīzu cron grafiku: katrs lauks var būt fiksēta vērtība, diapazons, saraksts, solis vai zvaigznīte, kas atbilst visam. Crontab izteiksmes kompaktums ir tās spēks, taču tas arī padara to par labu cron dekodētājs ir nepieciešams, lai vizuāli apstiprinātu nodomu. Tā ir visa būtība šī cron pārveidotāja: izveidojiet lasāmu cron skaidrojumu, kā arī sarakstu nākamās nāvessodas.

Krona izteiksmes anatomija

Šiem pieciem laukiem ir kopīga gramatika. Šeit ir norādīti ierobežojumi, ko pieņem katra a kolonna Standarta crontab izteiksme:

  • Minūte: 0-59.
  • Laiks: 0-23, 24 stundu formāts.
  • Mēneša diena: 1-31.
  • Mēnesis: 1-12 vai teksta saīsinājumi JAN, FEB, MAR, GPL, MAJ, JUN, JUL, AUG, SEP, OCT, NOV, DEC.
  • Nedēļas diena: 0-7, kur 0 un 7 abi apzīmē svētdienu vai saīsinājumus SUN, MON, TUE, WED, THU, Pk, SAT.

Īpašās rakstzīmes, kas tiek koplietotas piecos laukos:

  • *: jebkura vērtība, atbilst visām laukā atļautajām vērtībām.
  • ,: diskrēts saraksts, piemēram, 1,15,30 minūšu laukā.
  • -: iekļaujošs diapazons, piemēram, 9-17 biroja stundām.
  • /: solis, piemēram, */15 = ik pēc 15 vienībām vai 0-30/5 = ik pēc 5 minūtēm no 0 līdz 30.

Quartz paplašinājumi (Java, AWS EventBridge, Spring): gramatika tiek palielināta līdz 6 vai 7 lauki ar sekunžu kolonnu priekšgalā (0-59) un dažreiz kolonnu Beigu gads (1970-2099). Quartz ievieš arī ? (nav konkrēta vērtība, lai atdalītu mēneša dienu un nedēļas dienu), L (pēdējā: mēneša pēdējā diena, vai pagājušajā piektdienā ar 5L), W (tuvākā darba diena) un # (Mēneša nedēļas N diena, piemēram, 2#3 — 3. pirmdiena). Izteiciens Kvarcs parasti nav saderīgs ar UNIX crontab, un otrādi: tas ir galvenais kļūdas avots, kopējot cron izteiksmi no vienas platformas uz citu.

Kāpēc atšifrēt cron izteiksmi?

0 0 * * * lasīšana ir ātra. Lasīt */7 2-5 1,15 * 1-5 ir daudz mazāk. Kad izteiksme ir ārpus triviāla, palielinās interpretācijas kļūdu risks un cron dekodēšana pats par sevi kļūst par pārskatīšanas posmu.

  • Atkļūdošanas izveide: izprotiet, kāpēc uzdevums tika aktivizēts plkst. 03:17, nevis plkst. 03:00 vai identificējiet divu darbu pārklāšanos.
  • Koda pārskatīšana: pārbaudiet, vai plānotājs, kas tiek nosūtīts kā izvilkšanas pieprasījums, dara to, ko dara. autors apgalvo, ka nav jāiegaumē katra simbola semantika.
  • Plānotāja audits: pārskatiet Linux cron darbus /etc/crontab un /etc/cron.d/, Dženkinsa aktivizētāji, Spec.schedule no Kubernetes CronJob, noteikumi AWS EventBridge un GCP Cloud Scheduler darbi.
  • Mantotā migrācija: atsāciet vēsturisko /etc/crontab bez dokumentāciju un pārbūvējiet uzdevumu karti pirms infrastruktūras izmaiņām.
  • Ieslēgšanās: ļaujiet jaunajam izstrādātājam atkārtoti izlasīt crontab un vienas nakts laikā nav jāapgūst visas īpašās rakstzīmes.

Kā lietot cron dekoderu

Procedūra, kas jāievēro, lai atšifrētu crontab izteiksmi, izmantojot rīku:

  1. Ielīmējiet cron izteiksmi ievades laukā (5 lauki, kas atdalīti ar atstarpes).
  2. Norādiet nākamo izpildes skaitu, kas jāaprēķina.
  3. Noklikšķiniet uz konvertēt, lai palaistu cron dekodēšanu: rīks atgriež cilvēka teikums, kas izskaidro palaišanu, kā arī nākamo nāvessoda datētu sarakstu.
  4. Vizuāli pārbaudiet, vai datumi atbilst jūsu nodomam (laiks, diena, biežums).
  5. Nokopējiet izvadi, izmantojot kopēšanas pogu, lai ielīmētu to biļetē, PR vai dokumentācijā tehniskais.

Rīks nodrošina ne tikai sintaktisko parsēšanu: tas nodrošina skaidrojumu cron dabiskajā valodā, padarot to gan par cron dekodētāju, gan a grafika pārbaudītājs.

Klasiski cron izteiksmes piemēri

Tālāk norādītie modeļi aptver lielāko daļu cron grafiku, kas sastopami ražošanā. Viņi visi ir derīgi operētājsistēmās Linux crontab, Kubernetes CronJob, GitHub Actions un lielākajā daļā pieteikumu plānotāji.

Izteiksme Cilvēka lasīšana
* * * * * Katru minūti
0 * * * * Katru stundu strauji
0 0 * * * Katru dienu pusnaktī
0 0 * * 0 Katru svētdienu pusnaktī
*/15 * * * * Ik pēc 15 minūtēm
0 9 * * 1-5 9:00 no pirmdienas līdz piektdienai
0 0 1 * * Katra mēneša 1. datums pusnaktī
0 0,12 * * * Katru dienu pusnaktī un pusdienlaikā
*/5 9-17 * * 1-5 Ik pēc 5 minūtēm darba laikā
30 2 1,15 * * Mēneša 1. un 15. datums plkst. 2:30

Lai izpildītu cron uzdevumu Linux serverī, rediģējiet lietotāja cron cilni no čaulas:

# rediģējiet pašreizējā lietotāja crontab
$ crontab -e

# uzskaitiet esošos uzdevumus
$ crontab -l

Pievienots # rindiņas piemērs: ikdienas dublēšana plkst. 3:00
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

cron pārveidotāja izvades piemērs */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
...

Bieži uzdotie jautājumi par cron dekodētāju

Kāda ir atšķirība starp UNIX cron un Quartz?

UNIX/Vixie cron izmanto 5 laukus (minūtes līdz nedēļas dienai), bez precizitātes līdz sekundei, un tam nav vietējais jēdziens “mēneša pēdējā diena”. Quartz (Java, Spring, AWS EventBridge) pievieno kolonnu sekundes augšpusē, dažreiz gads kolonna apakšā un vairāki simboli (?, L, W, #) trūkst Linux crontab cilnē. A cron izteiksme tādēļ 6 lauku kvarcs nav tieši pārnēsājams /etc/crontab un otrādi. Mūsu cron dekodētājs ir paredzēts 5 formātam lauki, kas aptver lielāko daļu plānotāju.

Kā palaist cron darbu ik pēc 5 minūtēm?

Minūtes laukā veicot darbību /:

*/5 * * * * /usr/local/bin/check-health.sh

Šī crontab izteiksme aktivizē skriptu katras minūtes 0, 5, 10, 15... stundu, katru dienu. Lai ierobežotu darba laiku no pirmdienas līdz piektdienai, pievienojiet ierobežojumus laika un nedēļas dienas laukos: */5 9-17 * * 1-5.

Ko nozīmē zvaigznīte (*) cron izteiksmē?

Zvaigznīte nozīmē jebkuru vērtību: tā atbilst visām lauka atļautajām vērtībām. In 0 0 * * *, trīs zvaigznes nozīmē “jebkura mēneša diena, jebkura mēnesī, jebkurā nedēļas dienā. Apvienojumā ar pirmajiem diviem laukiem, kas iestatīti uz 0, mēs saņem "katru dienu pusnaktī". Zvaigznīti var apvienot arī ar soli: */15 collas minūte = ik pēc 15 minūtēm.

Vai Crontab ir laika josla?

Pēc noklusējuma ir servera laika josla. Linux crontab sistēmā tā ir sistēma TZ (bieži vien UTC VPS un konteineri). GitHub Actions piespiež UTC. Kubernetes CronJob izmanto kontroliera laika joslu, konfigurējams, izmantojot spec.timeZone kopš 1.27. AWS EventBridge novērtē izteiksmes pēc UTC. Lietojumprogrammu plānotāji (Symfony Scheduler, Quartz, Airflow) bieži ļauj iestatīt a laika josla, kas paredzēta katram uzdevumam. Ja rodas šaubas, pārbaudiet datumu mērķa serverī un salīdziniet ar cron pārveidotāja izvadi.

Cron darbs pret komandu: kuru izvēlēties?

cron tiek izmantots, lai izpildītu atkārtotu uzdevumu saskaņā ar grafiku. Tiek izmantots at lai izpildītu komandu tikai vienu reizi noteiktā laikā. Ikdienas dublēšanai, žurnāla rotācija vai regulārs API izsaukums, izmantojiet cron. Lai atliktu vienu darbību (“restartēt šo izvietošanu plkst. 22:00 šovakar”), izmantojiet:

$ echo "/usr/local/bin/deploy.sh" | plkst. 22:00
Kā pārbaudīt cron izteiksmi, to neaktivizējot?

Tieši tāda ir šī cron pārveidotāja loma: tas aprēķina nākamo N izpildi no pašreizējā laika, neuzsākot nevienu darbu. Jūs uzreiz redzat, vai jūsu Crontab izteiksme tiek aktivizēta 03:00, kā paredzēts, vai 03:17 nejauši. Lai iet tālāk pirms uzdevuma instalēšanas varat arī pārbaudīt tikai skriptu (bash -x script.sh) un pārbaudiet crontab faila sintaksi ar crontab -T failu izplatījumos kas to atbalsta.

Kas notiek, ja ir iestatīta gan mēneša diena, gan nedēļas diena?

Operētājsistēmā Vixie cron (Linux) noteikums ir loģisks VAI: darbs tiek aktivizēts, ja viens vai otrsno diviem laukiem atbilst. Tas ir pretrunā intuitīvam un kļūdu avots. Kvarcs izmanto a UN, tāpēc ir ieviests simbols ?, lai skaidri norādītu “nē ierobežojums”. Parasti labojiet tikai vienu no diviem laukiem.

Pieprasījuma piemērs

curl -X POST https://cdrn.fr/api/v1/tools/cron-converter/execute \
  -H "Content-Type: application/json" \
  -d '{"cron":"...","number_next_date":1}'

Ievades shēma

Lauks Tips Obligāts Noklusējums
cron string
number_next_date integer

Endpoint

  • GET https://cdrn.fr/api/v1/tools - uzskaita visus pieejamos rīkus
  • GET https://cdrn.fr/api/v1/tools/cron-converter - iegūst šī rīka shēmu
  • POST https://cdrn.fr/api/v1/tools/cron-converter/execute - izpilda šo rīku ar JSON payload