Pereiti prie pagrindinio turinio

Periodinės Cron užduotys VPS serveryje

Atnaujinta šią savaitę

Cron yra laiku paremtas periodinių užduočių vykdymui naudojama tarnyba. Vartotojams cron leidžia periodiškai vykdyti jų pasirinktas komandas ar skriptus nurodant šių komandų įvykdymo tikslų laiką.

Sudarant ir redaguojant jau sukurtas periodines cron užduotis yra redaguojamas crontab failas.

Norint redaguoti crontab failą, naudojame sekančią komandą:

crontab -e


Crontab sitaksė

Įprastas periodinės cron užduoties aprašymas atrodo taip:

1 2 3 4 5 /path/to/command arg1 arg2


arba

1 2 3 4 5 /root/backup.sh


Kur,

  1. Minutės (0-59)

  2. Valandos (0-23)

  3. Dienos (0-31)

  4. Mėnesiai (0-12 [12 == Gruodis])

  5. Savaitės diena(0-7 [7 arba 0 == Sekmadienis])

/path/to/command - Norimas įvykdyti skriptas arba komanda.

Paprastas, tačiau patogus sintaksei įsiminti naudotinas formatas:

* * * * * command to be executed
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)


Taip pat yra galimybė nurodyti kokio vartotojo vardu yra norima vykdyti numatyta komanda ar skriptas, naudojant tokią sintaksę:

1 2 3 4 5 VARTOTOJAS /path/to/command arg1 arg2


arba

1 2 3 4 5 VARTOTOJAS /path/to/script.sh


Pavyzdys: Įdiegiamas pavyzdinis skriptas:

Norint kad Jūsų serveryje kas parą, 03:00 laiku būtų vykdomas norimas skriptas, reikėtų naudoti sekančią komandų seką:

crontab -e


Pridėti sekančią eilutę:

0 3 * * * /root/backup.sh


Išsaugokite ir uždarykite failą.

Daugiau pavyzdžių:

Norint paleisti /path/to/command kiekvieną dieną 5 min. po vidurnakčio:

5 0 * * * /path/to/command


Norint paleisti /path/to/script.sh kiekvieno mėnesio pirmos dienos 14:15

15 14 1 * * /path/to/script.sh


Norint paleisti /scripts/phpscript.php šiokiadieniais 22:00 :

0 22 * * 1-5 /scripts/phpscript.php


Norint paleisti /root/scripts/perl/perlscript.pl kiekvieną dieną 00:23, 02:23, 04:23 ... :

23 0-23/2 * * * /root/scripts/perl/perlscript.pl


Norint paleisti /path/to/unixcommand 04:05 kiekvieną sekmadienį:

5 4 * * sun /path/to/unixcommand


Norint gauti esamų crontab užduočių sąrašą, naudojama ši komanda:

crontab -l


Norint gauti esamų crontab užduočių sąrašą, nurodant konkretų vartotoją:

crontab -l -u username


Taip pat siekiant vartotojui palengvinti esamų periodinių užduočių suprantamumą yra galimybė naudoti specialiai tam sudarytus laiku nurodyti žodinius pakaitalus:

Žodinis pakaitalas	Reikšmė
@reboot Paleisti vieną kartą, po serverio paleidimo.
@yearly Paleisti kartą metuose, "0 0 1 1 *".
@annually (tas pats kaip ir @yearly)
@monthly Paleisti kartą per mėnesį, "0 0 1 * *".
@weekly Paleisti kartą per savaitę, "0 0 * * 0".
@daily Paleisti kartą per dieną, "0 0 * * *".
@midnight (tas pats kaip ir @daily)
@hourly Paleisti kartą per valandą, "0 * * * *".


Pavyzdys:

@hourly /path/to/script.sh


Naudojamų operatorių aprašymas

Operatoriai leidžia vartotojui nurodyti periodinėse cron užduotyse daugiareikšmius parametrus. Yra galimi trys operatoriai:

  • Žvaigždutė (*): nurodo visas galima reikšmės nurodytame laukelyje. Pavyzdžiui, žvaigždutės simbolis valandos laukelyje yra tolygus nurodytoms visoms valandų reikšmėms (kiekvienai valandai).

  • Kablelis (,): nurodo sąrašą reikšmių. Pavyzdžiui: "1,5,10,15,20, 25".

  • Brūkšnys (-): nurodo reikšmių intervalą. Pavyzdžiui: "5-15" dienos. Kas yra tolygu tokiam užrašymui, naudojant kablelio operatorių: ""5,6,7,8,9,....,13,14,15".


crontab failo turinys

Pagal nutylėjimą /etc/crontab failo turinys:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly


Kuriame yra nurodoma, jog skriptams vykdyti bus naudojama /bin/bash aplinka. Bei nurodoma kokiais laiko periodais bus vykdomi /etc/cron.* kataloguose esantys skriptai.

Bendru atveju, pageidaujant kad tam tikras skriptas būtų vykdomas pvz. kiekvieną valandą, jį užtenka įkelti į /etc/cron.hourly katalogą.

Pagal nutylėjimą sistemoje esantys periodinių cron užduočių tikrinami katalogai:

  • /etc/cron.daily

  • /etc/cron.hourly

  • /etc/cron.monthly

  • /etc/cron.weekly

Atsarginės kopijos

Norint išsaugoti crontab periodinių užduočių atsargines kopijas, naudojamos šios komandos:

crontab -l > /home/test/users.root.bakup
crontab -u userName -l > /home/test/users.root.bakup


El. pašto pranešimų išjungimas

Pagal nutylėjimą įvykdžius cron periodinę užduotį, užduoties metu paleidžiamo skripto išeities kodas yra išsiunčiamas el. paštu į nurodyta lokalų el. pašto adresą. Jeigu norima specifinei cron užduočiai nurodyti nesiųsti išeities kodo, reikia įrašas norimą užduoti pridėti jos pabaigoje ">/dev/null 2>&1" kodo dalį.

0 3 * * * /root/backup.sh >/dev/null 2>&1


Jeigu norima nurodyti, kad skripto sugeneruotas išeities kodas būtų siunčiamas į specifinę el. pašto dėžutę (pvz. "[email protected]"). Prieš tai reikia apibrėžti MAILTO kintamąjį.

MAILTO="[email protected]" 0 3 * * * /root/backup.sh >/dev/null 2>&1


Prieigos prie periodinių cron užduočių vykdymo draudimas

Pagal nutylėjimą visi sisteminiai vartotojai turi prieigą vykdyti periodines cron užduotis. Pageidaujant, prieiga prie periodinių cron užduočių vykdymo yra reguliuojama įrašant pageidaujamu ir nepageidaujamus sistemos vartotojus į /etc/cron.allow ir /etc/cron.deny failus.

  • /etc/cron.allow - sistemos vartotojų sąrašas, kuriems yra suteikta galimybė vykdyti periodines cron užduotis.

  • /etc/cron.deny - sistemos vartotojų sąrašas, kuriems yra draudžiama galimybė vykdyti periodines cron užduotis.

Pavyzdys:

Pageidaujant, kad periodines cron užduotis vykdyti galėtų tik specifinis vartotojas, reikėtų pradžiai uždrausti visiems vartotojams vykdyti periodines cron užduotis /etc/cron.deny faile nurodant "ALL" reikšmę - taip uždraudžiant visiems vartotojams vykdyti periodines cron užduotis. O po to nurodyti pageidaujamą specifinį vartotoją /etc/cron.allow faile (pvz. vartotoją adminas) - taip suteikiant tik šiam sistemos vartotojui prieigą prie periodinių cron užduočių.

Būtų reikalingos įvykdyti šios komandos:

echo ALL >> /etc/cron.deny echo adminas >> /etc/cron.allow

___
Naudingos nuorodos:

Periodinių cron užduočių kodo generavimo įrankiai:


Daugiau informacijos apie crontab įrankį galite rasti įvykdę šią komandą:

man crontab
Ar gavote atsakymą į savo klausimą?