Pereiti prie turinio

Cron išraiškų vertėjas:
ką daro ši eilutė?

Įklijuokite eilutę tiesiai iš crontab — tik penkis laukus arba visą eilutę su komanda. Gausite tvarkaraštį vienu sakiniu paprasta kalba, kiekvieną lauką iššifruotą ir dešimt artimiausių paleidimo datų. Niekur nieko nesiunčiame: išraišką išnagrinėja pati jūsų naršyklė.

Nuo ko pradėti

Skaitykite laukus šia tvarka

Paveldėtos crontab eilutės retai būna dokumentuotos. Penkis laukus skaitykite šia tvarka:

1 · Suskaičiuokite laukus

Penki tarpais atskirti laukai — tai crontab. Šeši ar septyni reiškia Quartz ar kitą planuoklį, pradedantį nuo sekundžių — tai kita kalba, tik panašiai atrodanti. Viskas po penkto lauko yra komanda, o ne tvarkaraštis.

5 = cron · 6+ = ne cron

2 · Pirmiausia du paskutiniai

Mėnesio diena ir savaitės diena nulemia, kuriomis dienomis. Jei abiejuose įrašyti skaičiai, sustokite: cron paleidžia užduotį, kai sutampa bent vienas iš jų — tai OR taisyklė ir klasikinė skaitymo klaida.

abu nurodyti → OR, ne AND

3 · Tada du pirmieji

Minutė ir valanda nurodo, kuriuo metu tomis dienomis užduotis paleidžiama. Žvaigždutė minučių lauke reiškia 60 paleidimų per valandą. Mėnesio laukas svarbus tik tada, kai jame ne žvaigždutė.

* minutėje = 60×/val.
Išnagrinėtas pavyzdys

Ką daro kiekviena šio crontab eilutė

Komandos crontab -l išvestis nepažįstamame serveryje, išversta eilutė po eilutės. Išverskite bet kurią — mygtukas įkelia ją į vertėją viršuje. Tinka ir ištisos eilutės: įklijuokite visą eilutę kartu su komanda į laukelį viršuje, o vertėjas paims tvarkaraštį ir įvardys likusią dalį kaip praleistą.

# m h dom mon dow komanda
*/5 * * * *   /usr/local/bin/health-ping.sh
30 3 * * *    /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
0 9 * * 1-5   /usr/local/bin/daily-digest.sh
0 6 1 * *     /usr/local/bin/invoice-run.sh
*/5 * * * *būklės tikrinimas kas 5 minutes, visą parą — 288 paleidimai per dieną
30 3 * * *naktinė atsarginė kopija 03:30 — tik šios eilutės išvestis rašoma į žurnalą
0 9 * * 1-5suvestinė 09:00, tik darbo dienomis — 1-5 paskutiniame lauke reiškia pirmadienį–penktadienį
0 6 1 * *sąskaitų išrašymas kiekvieno mėnesio 1 d. 06:00 — 1 viduriniame lauke yra mėnesio diena, o ne savaitės diena
Skaitymo kryptis

Ką reiškia kiekvienas cron simbolis

Kiekvienas simbolis yra suglaustas užrašas, o neteisingai jį išskleidus tvarkaraštis per kodo peržiūrą ir suprantamas ne taip:

  • Žingsniai skaičiuojami nuo mažiausios lauko reikšmės. */6 valandų lauke reiškia 00, 06, 12, 18 — o ne „praėjus šešioms valandoms nuo paskutinio paleidimo“.
  • Skaičiai abiejuose dienų laukuose reiškia OR, o ne AND. Cron paleidžia užduotį, kai sutampa bent vienas iš jų, todėl tvarkaraštis platesnis, nei atrodo.
  • Pavadinimai ir trumpiniai veikia ne visur. MON ir @daily tinka čia ir daugumoje cron versijų — bet skaičius supranta kiekvienas cron.
Pažiūrėkite, kaip OR taisyklė veikia gyvai

Simboliai — ką jie reiškia

į ką jie išsiskleidžia
*bet kas — minučių lauke tai 60 paleidimų per valandąatitinka viską
*/6kas 6-a reikšmė, skaičiuojant nuo mažiausios lauko reikšmėsžingsnis
9-17ruožas, įskaitant abu galusdiapazonas
1,15tik šios reikšmės, nieko tarp jųsąrašas
MON · JAN3 raidžių pavadinimai, kuriuos priima ne visi cron — šis puslapis juos supranta, bet skaičiai perkeliami visurskaitoma čia
@dailytrumpinys, žymintis 0 0 * * * — čia išskleidžiamas, kad matytumėte, kas po juo slypiišskleista
L # ? WQuartz (Jenkins, Spring) — crontab tokios eilutės nepriimane cron
Kanoninė forma

0 0 * * 0, @weekly ir SUN

Visos keturios eilutės žemiau reiškia sekmadienį vidurnaktį. Vertėjas kiekvieną perskaito ta pačia fraze ir pateikia tą patį artimiausių paleidimų sąrašą.

Skaičiai — juos supranta kiekvienas cron0 0 * * 0
Trumpinys@weekly
Dienos pavadinimas0 0 * * SUN
7 taip pat reiškia sekmadienį0 0 * * 7
Iš bibliotekos

Kasdienės cron išraiškos

Kiekviena jau iššifruota ir turi savo puslapį — artimiausi paleidimai, variantai ir crontab eilutė, paruošta kopijuoti. Visas rinkinys — cron pavyzdžių bibliotekoje.

Cron užduotis kas minutę* * * * *
Cron užduotis kas 5 minutes*/5 * * * *
Cron užduotis kas 15 minučių*/15 * * * *
Cron užduotis kas 30 minučių*/30 * * * *
Cron užduotis kas valandą0 * * * *
Cron užduotis kas 6 valandas0 */6 * * *
Cron užduotis kasdien vidurnaktį0 0 * * *
Cron užduotis kiekvieną darbo dieną0 0 * * 1-5
Cron užduotis kiekvieną sekmadienį0 0 * * 0
Cron užduotis kas mėnesį0 0 1 * *
Cron užduotis kas ketvirtį0 0 1 */3 *
Cron užduotis kas metus0 0 1 1 *
DUK

Dažniausiai įklijuojamos cron išraiškos

Kas minutę, kiekvieną valandą, kiekvieną dieną — 1 440 paleidimų per parą, 525 600 per metus. Visi penki laukai yra žvaigždutės, todėl niekas neribojama. Tai tinkamas tvarkaraštis pigiam būklės tikrinimui ir netinkamas beveik viskam kitam. Paveldėtame crontab prieš išteklių reikalaujantį scenarijų tai pirmoji eilutė, dėl kurios verta suabejoti.

Kas 5-a to lauko reikšmė, skaičiuojant nuo mažiausios jo reikšmės. Minučių lauke */5 suveikia :00, :05, :10 … :55 — 12 kartų per valandą, lygiai pagal laikrodį. Tai nereiškia „5 minutės po paskutinio paleidimo“: cron lygina laikrodžio reikšmes. Todėl */7 duoda :00, :07 … :56 ir vėl :00 — kiekvienos valandos pradžioje lieka 4 minučių tarpas.

Kasdien vidurnaktį pagal serverio laiką — 0 valandos 0 minutė, bet kuri data, bet kuris mėnuo, bet kuri savaitės diena. Būtent šį tvarkaraštį ir sutrumpina @daily. „Vidurnaktis“ čia yra serverio vidurnaktis, o laiko keitimo naktį serveris, dirbantis vietos laiku, jį gali praleisti arba pakartoti.

Tas pats. Trumpiniai atitinka tiksliai: @hourly = 0 * * * *, @daily ir @midnight = 0 0 * * *, @weekly = 0 0 * * 0, @monthly = 0 0 1 * *, @yearly = 0 0 1 1 *. Išsiskiria @reboot — tai apskritai ne tvarkaraštis: jis suveikia paleidus cron tarnybą. Šis vertėjas trumpinius išskleidžia, kad visada matytumėte penkis laukus po jais.

Todėl, kad ji ne iš crontab. Quartz (Jenkins, Spring), kai kurie debesų planuokliai ir kelios cron bibliotekos priekyje prideda sekundžių lauką — todėl laukų šeši, o su metais gale — septyni. Crontab tokios eilutės neįdiegs. Jei sekundžių laukas yra 0, jį pašalinkite ir likę penki paprastai perskaitomi kaip POSIX. Jei ten kas kita, tvarkaraštis suveikia dažniau nei kartą per minutę, o paprastas cron to net negali užrašyti.

Quartz kalboje tai reiškia „konkreti reikšmė nenurodyta“. Quartz reikalauja, kad lygiai vienas iš dviejų dienų laukų liktų nenurodytas, todėl viename jų atsiranda klaustukas. POSIX cron tokios taisyklės neturi ir ? nepriima — jo darbą atlieka paprasta *. Kai apriboti abu dienų laukai, cron paleidžia užduotį pagal jų sąjungą. Įklijavus ? į crontab, eilutė atmetama.

Taip. Įklijuokite 30 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1 ir vertėjas paims penkis tvarkaraščio laukus, juos išvers, o likusią eilutės dalį įvardys kaip praleistą. Jis supranta ir /etc/crontab formatą, kur tarp tvarkaraščio ir komandos rašomas naudotojo vardas. Ko jis nedarys — nespėlios dėl šešių laukų eilutės: sekundžių laukas priekyje reiškia Quartz, o ne crontab, ir tai kita kalba.

Įklijuokite išraišką viršuje. Rezultatų lange išvardijama dešimt artimiausių paleidimų konkrečiomis datomis — juos apskaičiuoja tikras analizatorius pagal jūsų naršyklės laiko juostą. Pats crontab dirba pagal serverio laikrodį: jei serveris veikia UTC, o jūs ne, visas sąrašas pasislenka jūsų laiko skirtumu. Bet niekas nepasakys, ar paleidimas pavyko — cron užrašo tik tai, kad užduotis buvo pradėta.

Nemokami įrankiai – tik pradžia.
Uptimia rūpinasi jūsų svetainių sveikata.

Veikimo laikas, SSL, domeno galiojimo pabaiga, puslapių greitis, transakcijos – stebima iš 171+ vietos visame pasaulyje. Nemokama 30 dienų.

30 dienų nemokamai kreditinės kortelės nereikia atšaukite bet kada nemokamas planas po bandomojo laikotarpio
Stebima 100 000+ svetainių · Atitinka BDAR