Aprēķināt nākamos cron izteiksmes izpildes
- Vadības panelis
- Dokumentācija
- API
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-12vai teksta saīsinājumiJAN,FEB,MAR,GPL,MAJ,JUN,JUL,AUG,SEP,OCT,NOV,DEC. - Nedēļas diena:
0-7, kur0un7abi apzīmē svētdienu vai saīsinājumusSUN,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,30minūšu laukā.-: iekļaujošs diapazons, piemēram,9-17biroja stundām./: solis, piemēram,*/15= ik pēc 15 vienībām vai0-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/crontabun/etc/cron.d/, Dženkinsa aktivizētāji,Spec.scheduleno Kubernetes CronJob, noteikumi AWS EventBridge un GCP Cloud Scheduler darbi. - Mantotā migrācija: atsāciet vēsturisko
/etc/crontabbez 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:
- Ielīmējiet cron izteiksmi ievades laukā (5 lauki, kas atdalīti ar atstarpes).
- Norādiet nākamo izpildes skaitu, kas jāaprēķina.
- 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.
- Vizuāli pārbaudiet, vai datumi atbilst jūsu nodomam (laiks, diena, biežums).
- 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īkusGET https://cdrn.fr/api/v1/tools/cron-converter- iegūst šī rīka shēmuPOST https://cdrn.fr/api/v1/tools/cron-converter/execute- izpilda šo rīku ar JSON payload