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,
- Minutės (0-59)
- Valandos (0-23)
- Dienos (0-31)
- Mėnesiai (0-12 [12 == Gruodis])
- 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. "testas@testas.lt"). Prieš tai reikia apibrėžti
MAILTO kintamąjį.
MAILTO="testas@testas.lt"
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
Komentarai
Reikėtų spausti CTRL + O ( Write out)
Ir ENTER.
Tai įrašys Root vartotojo cron tabą.
Jei serveris neužsikraus, ar būsi pasiruošęs pranešti administratoriams?
O komanda paprasta:
0 2 * * 0 reboot
Kaip ir minėjo moxfelv, perkrovimas kiekvieną sekmadienį 02:00:
Paprastumo dėlei galite išmėginti automatinį crontab kodo generavimo įrankį apsilankę šiuo adresu.
Skriptas leidžiamas labai dažnai ir kiekvieną kartą sukuriamas failiukas /root kataloge.
Kaip padaryti kad jokie failiukai nebūtų kuriami ?
Jeigu Jūs pageidaujate, kad po atsiuntimo failai būtų trinami, Jūs galite naudoti --delete-after parametrą:
Jei jums reikia ne to, tai atsiprasau uz siukslinima.