Dedikuoti serveriai, VDS hostingas, debesų kompiuterija
Interneto vizija
Karjera El. paštas

Grįžti   Dedikuoti.lt forumas > Bendruomenės diskusijos > Pamokos > Informaciniai straipsniai

 
 
Temos įrankiai Ieškoti šioje temoje
  #1  
Senas 2013-05-22, 12:31
IV_VygandasS avataras
IV_VygandasS IV_VygandasS neprisijungęs
Serverių ekspertas (-ė)
 
Prisiregistravo: 2013 03
Žinutės: 169
Post Periodinės Cron užduotys

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ą:

Kodas:
crontab -e
Crontab sitaksė

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

Kodas:
1 2 3 4 5 /path/to/command arg1 arg2
arba

Kodas:
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:

Kodas:
* * * * * 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ę:

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

Kodas:
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ą:

Kodas:
crontab -e
Pridėti sekančią eilutę:

Kodas:
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:

Kodas:
5 0 * * * /path/to/command
Norint paleisti /path/to/script.sh kiekvieno mėnesio pirmos dienos 14:15

Kodas:
15 14 1 * * /path/to/script.sh
Norint paleisti /scripts/phpscript.php šiokiadieniais 22:00 :

Kodas:
0 22 * * 1-5 /scripts/phpscript.php
Norint paleisti /root/scripts/perl/perlscript.pl kiekvieną dieną 00:23, 02:23, 04:23 ... :

Kodas:
23 0-23/2 * * * /root/scripts/perl/perlscript.pl
Norint paleisti /path/to/unixcommand 04:05 kiekvieną sekmadienį:

Kodas:
5 4 * * sun /path/to/unixcommand
Norint gauti esamų crontab užduočių sąrašą, naudojama ši komanda:

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

Kodas:
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:

Kodas:
Ž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:
Kodas:
@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:

Kodas:
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:

Kodas:
crontab -l > /home/test/users.root.bakup
Kodas:
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į.

Kodas:
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į.

Kodas:
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:

Kodas:
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ą:

Kodas:
man crontab

Paskutinį kartą redagavo IV_VygandasS : 2013-09-11 10:03 Priežastis: Pataisyta
  #2  
Senas 2013-05-23, 03:40
moxfelv moxfelv neprisijungęs
Naujokas (-ė)
 
Prisiregistravo: 2013 04
Žinutės: 31
Pagrindinis Ats: Periodinės Cron užduotys

Galbūt naujokai nežinos ką daryti įvedus komandas, taigi:

Reikėtų spausti CTRL + O ( Write out)
Ir ENTER.

Tai įrašys Root vartotojo cron tabą.
  #3  
Senas 2013-05-27, 11:16
karolisitmarks karolisitmarks neprisijungęs
Naujokas (-ė)
 
Prisiregistravo: 2012 03
Žinutės: 5
Pagrindinis Ats: Periodinės Cron užduotys

Laba diena. Gal galėtumėte parašyti pavyzdį, kaip periodiškai nustatyti serverio perkrovimą, tarkime kiekvieną sekmadienį 02:00 nakties?
  #4  
Senas 2013-05-27, 11:27
moxfelv moxfelv neprisijungęs
Naujokas (-ė)
 
Prisiregistravo: 2013 04
Žinutės: 31
Pagrindinis Ats: Periodinės Cron užduotys

O kam to reikia?
Jei serveris neužsikraus, ar būsi pasiruošęs pranešti administratoriams?

O komanda paprasta:

0 2 * * 0 reboot
  #5  
Senas 2013-05-27, 11:37
IV_VygandasS avataras
IV_VygandasS IV_VygandasS neprisijungęs
Serverių ekspertas (-ė)
 
Prisiregistravo: 2013 03
Žinutės: 169
Pagrindinis Ats: Periodinės Cron užduotys

Citata:
karolisitmarks rašė Peržiūrėti žinutę
Laba diena. Gal galėtumėte parašyti pavyzdį, kaip periodiškai nustatyti serverio perkrovimą, tarkime kiekvieną sekmadienį 02:00 nakties?
Kaip ir minėjo moxfelv, perkrovimas kiekvieną sekmadienį 02:00:

Kodas:
0 2 * * 0 /sbin/reboot
Paprastumo dėlei galite išmėginti automatinį crontab kodo generavimo įrankį apsilankę šiuo adresu.
  #6  
Senas 2013-06-26, 00:17
rufas rufas neprisijungęs
Naujokas (-ė)
 
Prisiregistravo: 2012 11
Žinutės: 10
Pagrindinis Ats: Periodinės Cron užduotys

Naudoju tokią komandą:
Citata:
wget http://www.xxxxxx.net/xxxxxxx.php>/dev/null 2>&1
Skriptas leidžiamas labai dažnai ir kiekvieną kartą sukuriamas failiukas /root kataloge.
Kaip padaryti kad jokie failiukai nebūtų kuriami ?
  #7  
Senas 2013-06-26, 10:09
IV_VygandasS avataras
IV_VygandasS IV_VygandasS neprisijungęs
Serverių ekspertas (-ė)
 
Prisiregistravo: 2013 03
Žinutės: 169
Pagrindinis Ats: Periodinės Cron užduotys

Citata:
rufas rašė Peržiūrėti žinutę
Naudoju tokią komandą:


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ą:

Kodas:
wget --delete-after http://www.xxxxxx.net/xxxxxxx.php > /dev/null 2>&1
  #8  
Senas 2013-06-26, 17:09
domenai domenai neprisijungęs
Naujokas (-ė)
 
Prisiregistravo: 2012 01
Žinutės: 49
Pagrindinis Ats: Periodinės Cron užduotys

rufai, jums turbut tik reikia kad ivykdytu php koda? tuomet geriau naudoti tokia komanda
Citata:
/usr/bin/php /kelias/iki/failo/failas.php
tuomet nebus kuriami failiukai.
Jei jums reikia ne to, tai atsiprasau uz siukslinima.
  #9  
Senas 2013-06-26, 17:44
rufas rufas neprisijungęs
Naujokas (-ė)
 
Prisiregistravo: 2012 11
Žinutės: 10
Pagrindinis Ats: Periodinės Cron užduotys

To reikia, bet iš tiesų ir su --delete-after suveikė puikiai viskas
  #10  
Senas 2018-01-10, 07:13
PyPKjE PyPKjE neprisijungęs
Naujokas (-ė)
 
Prisiregistravo: 2018 01
Žinutės: 1
Pagrindinis Ats: Periodinės Cron užduotys

Gal kam teko susidurti su šiais error'ais
Citata:
(*system*) ERROR (Missing newline before EOF, this crontab file will be ignored)
/usr/sbin/cron[23745]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
Svarbiau būtu antras error'as daug pragooglinau įvairiausius sprendimus bandžiau padaryti nepavyko sutaisyti :/
 

Žymės
cron, crontab, periodinės užduotys

Temos įrankiai Ieškoti šioje temoje
Ieškoti šioje temoje:

Detali paieška

Žinučių rašymo taisyklės
Jūs negalite kurti naujų temų
Jūs negalite rašyti žinučių
Jūs negalite įkelti failų
Jūs negalite redaguoti savo įrašų

BB kodas yra Įjungtas
Šypsenos yra Įjungtas
[IMG] kodas yra Įjungtas
HTML kodas yra Išjungtas

Greita navigacija

Panašios temos
Tema Temą sukūrė Forumas Atsakymai Paskutinė žinutė
Vesta CP Cron komandos, ką jos konkrečiai daro babi Klausimai, pastabos, pasiūlymai 2 2017-07-14 14:23
kaip sukurt cron job'a? vvtmedia Pagalba 1 2012-01-07 11:37


Visi laikai yra GMT +3. Šiuo metu yra 11:28.


Powered by vBulletin®
Copyright ©2000 - 2019, vBulletin Solutions, Inc.