![]() |
Lucainas visuomenės prieš kažkiek laiko puikus cron ir crontab pamokymas kad manau verta dalintis. „Cron“ yra tam tikras „Windows“ numatytų užduočių atitikmuo, tik kad jis tvarkomas iš terminalo. Tie, kurie nori vizualinės sąsajos tam pačiam tikslui pasiekti, gali tai pamatyti kitas punktas. |
Kas yra cron?
Cron pavadinimas kilęs iš graikų chronos, kuris reiškia „laikas“. „Unix“ operacinėje sistemoje „cron“ yra įprastas fono procesų tvarkytuvas („daemon“), kuris reguliariai (pvz., Kiekvieną minutę, dieną, savaitę ar mėnesį) valdo procesus ar scenarijus. Procesai, kuriuos reikia vykdyti, ir laikas, kada jie turi būti vykdomi, nurodyti crontab faile.
Kaip veikia
Cron daemon prasideda nuo /etc/rc.d/ o /etc/init.d priklausomai nuo pasiskirstymo. „Cron“ veikia fone, kiekvieną minutę tikrina „crontab“ užduočių lentelę / etc / crontab , / var / spool / cron ieškant užduočių, kurias reikia atlikti. Kaip vartotojas galime pridėti komandas ar scenarijus su užduotimis, kad automatizuotume kai kuriuos procesus. Tai naudinga, pavyzdžiui, norint automatizuoti sistemos arba geros atsarginės sistemos atnaujinimą.
Kas yra „Crontab“?
„Crontab“ yra paprastas tekstinis failas, kuriame saugomas komandų, kurias reikia vykdyti vartotojo nurodytu laiku, sąrašas. „Crontab“ patikrins datą ir laiką, kada turėtų būti vykdomas scenarijus ar komanda, vykdymo teises ir tai padarys fone. Kiekvienas vartotojas gali turėti savo „crontab“ failą, iš tikrųjų / etc / crontab manoma, kad tai yra šakninio vartotojo crontab failas, kai įprasti vartotojai (ir net root) nori sukurti savo crontab failą, tada mes naudosime komandą crontab.
„Crontab“ yra paprasčiausias būdas valdyti „cron“ užduotis daugelio naudotojų sistemose kaip paprastas sistemos vartotojas arba pagrindinis vartotojas.
Naudojant crontab
Mes pradedame nuo paprasto pavyzdžio.
Mes ketiname automatizuoti sistemos atnaujinimą, kad pašalintume erzinantį „Aš visada turiu atnaujinti ir man tai nepatinka!“
Pirmiausia sukursime scenarijų. Šį scenarijų vadins „cron“ ir jame bus visos norimos instrukcijos, todėl prieš įtraukiant jį į „cron“, būtina jį išbandyti keliais atvejais ir keliais būdais: paprastas atnaujinimo scenarijus, kaip šis:
#! / bin / bash #script atnaujinimo pavyzdys #pasirinkite platinimą # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu
Pašalinkite # iš savo platinimo linijos. Jei tai Ubuntu / Debian, tai prasideda apt-get.
Scenarijų įrašome kaip update.sh (pvz., Scenarijai nukreipia jūsų namus). Minėto scenarijaus vykdymo teises keičiame:
chmod a + x ~ / scripts / update.sh
Mes keletą kartų paleidome scenarijų, kad patikrintume, ar viskas veikia sklandžiai, mes modifikuojame tai, kas būtina (jame neturėtų būti klaidų, kitaip „cron“ klaidą pakartos tik vėl ir vėl). Dabar pridėkite užduotį prie mūsų krašto.
Pridėkite užduočių prie „crontab“
„Crontab“ leidimą vykdome su „crontab -e“, kai kuriuose distros centruose (pvz., „Ubuntu“) jis suteikia galimybę pasirinkti norimą teksto redaktorių, likusius mums lieka vi. Crontab failas atrodys maždaug taip.
# mh dom mon dow vartotojo komanda
kur:
- m atitinka minutę, kai scenarijus bus vykdomas, vertė svyruoja nuo 0 iki 59
- h tikslus laikas, 24 valandų formatas tvarkomas, reikšmės svyruoja nuo 0 iki 23, o 0 yra 12:00 vidurnakčio.
- dovana nurodo mėnesio dieną, pavyzdžiui, galite nurodyti 15, jei norite paleisti kas 15 dienų
- dow reiškia savaitės dieną, ji gali būti skaitinė (nuo 0 iki 7, kur 0 ir 7 yra sekmadienis) arba pirmosios 3 dienos raidės angliškai: pirmadienis, antradienis, trečiadienis, ketvirtadienis, penktadienis, sekmadienis, saulė.
- vartotojas apibrėžia vartotoją, kuris vykdys komandą, ji gali būti root arba kitas vartotojas, jei jie turi leidimus vykdyti scenarijų.
- komanda nurodo komandą arba absoliutų scenarijaus kelią, kurį reikia vykdyti, pavyzdys: /home/usuario/scripts/update.sh, jei jis kviečia scenarijų, jis turi būti vykdomas
Kad būtų aišku, keletas aiškinamųjų užduočių pavyzdžių:
15 10 * * * vartotojas /home/user/scripts/update.sh
Jis paleis „update.sh“ scenarijų kiekvieną dieną 10:15 val
15 22 * * * vartotojas /home/user/scripts/update.sh
Jis paleis „update.sh“ scenarijų kiekvieną dieną 10:15 val
00 10 * * 0 root apt-get -y atnaujinimas Root vartotojas
Ji bus atnaujinta kiekvieną sekmadienį 10:00 val
45 10 * * saulės šaknies apt-get -y atnaujinimas
Pagrindinis vartotojas atnaujins kiekvieną sekmadienį (sekmadienį) 10:45
30 7 20 11 * vartotojas /home/usuario/scripts/updata.sh
Lapkričio 20 d. 7 val. Vartotojas paleis scenarijų
30 7 11 11 saulės vartotojas /home/usuario/scripts/pastel_con_velitas.sh
Lapkričio 11 d., 7 val., Tai yra sekmadienį, vartotojas švęs savo „sysadmin“ (tai yra aš)
01 * * * * vartotojas /home/usuario/scripts/molestorecordatorio.sh
Erzinantis priminimas kiekvieną valandą kiekvieną valandą kiekvieną dieną (Nerekomenduojama).
Jie vis dar gali būti tvarkomi specialūs diapazonai:
30 17 * * 1,2,3,4,5
Kiekvieną dieną nuo pirmadienio iki penktadienio 5:30 popiet.
00 12 1,15,28 *
Kiekvieno mėnesio pirmą, penkioliktą ir 12 dieną 28 val. (Idealiai tinka darbo užmokesčiui)
Jei tai yra painu, sutraukite rankenas specialios eilutės šiems diapazonams apibrėžti.
@reboot Paleiskite vieną kartą, paleidimo metu
@ metai vyksta tik kartą per metus: 0 0 1 1 *
@ kasmet tas pats kaip @metai
@ mėnuo eina kartą per mėnesį, pirmą dieną: 0 0 1 * *
@ Savaitinė savaitinė savaitės pirmos valandos pirma minutė. 0 0 * * 0 ″.
Kasdien, kasdien, 12 val. 00 0 * * *
@ midnight tas pats kaip @daily
@ valandą kiekvieną valandą pirmą minutę: 0 * * * *
Jo naudojimas yra labai paprastas.
@ valandinis vartotojas /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh
Paskutinis, bet ne prasčiausias:
„Cron“ darbo valdymas
crontab failas
Pakeiskite esamą „crontab“ failą vartotojo apibrėžtu failu
crontab -e
Redaguokite vartotojo crontab failą, kiekviena nauja eilutė bus nauja crontab užduotis.
crontab -l
Išvardinkite visas vartotojo užduotis
crontab -d
Ištrinkite vartotojo kryželį
crontab -c rež
Nurodo vartotojo crontab katalogą (jis turi turėti vartotojo rašymo ir vykdymo teises)
crontab -u vartotojas
priešdėlis, skirtas tvarkyti kito vartotojo kraštovaizdį, pavyzdžiai:
$ sudo crontab -l -u šaknis $ sudo crontab -e user2 #crontab -d -u vartotojas
Šį įrankį, kaip ir daugelį kitų, galima pamatyti išsamiau ir išsamiau:
Ugh ... šiek tiek painu.
Trūksta * / 30 (minučių lauke), kuris eina kas 30 minučių ...
Tik tai ketinau komentuoti, kol nusprendžiau peržiūrėti komentarus 😀
Šis modifikatorius yra labai svarbi informacija ir kažkas labai naudinga.
Sveiki!
Šiuo metu testuoju konfigūraciją kas 45 minutes.
* / 45 * * * *, o instrukcija vykdoma kas valandą 45 minutes IR kas valandą. Tai reiškia:
Jis veikia 3:45, tada 4:00, 4:45, tada 5:00, 5:45, 6:00, 6:45 ir t.t.
Man kažkas negerai? Ką aš galiu padaryti, kad tai būtų tik kas 45 minutes arba bent kartą per 45 minutes kas valandą.
Sveiki!
Šiuo metu testuoju konfigūraciją kas 45 minutes.
* / 45 * * * *, o instrukcija vykdoma kas valandą 45 minutes IR kas valandą. Tai reiškia:
Jis veikia 3:45, tada 4:00, 4:45, tada 5:00, 5:45, 6:00, 6:45 ir t.t.
Man kažkas negerai? Ką aš galiu padaryti, kad tai būtų tik kas 45 minutes arba bent kartą per 45 minutes kas valandą.
Sveiki, labai naudinga informacija, siekiant paaiškinti, kaip veikia cron.
baitai
dėl *
Puiku, ačiū, kad paaiškinote, kaip veikia cron .. padėkime šiek tiek rankos 🙂
Ši eilutė, kaip suprantu, bus įvykdyta 10 val., Pataisykite, jei klystu
Na ten parašyta 10:15 val
15 22 * * * vartotojas /home/user/scripts/update.sh
Sveiki! labai gera info.
Norint vykdyti scenarijų kas pusvalandį, eilutė, kurią reikėtų pridėti prie „CronTab“, būtų tokia: "30 * * * * root Scrip.sh" Teisingai? Labai ačiū!
Ne. Jei gerai prisimenu, turite įdėti / 30 * * * * šakninę Scrip.sh.
Tai yra, pridėkite / prieš 30.
Cheers! Paulius.
Sveiki, man patiko jūsų pranešimas, jis labai išsamus, bet norėjau jūsų paklausti.
Turiu problemų dėl šios komandos ir panašaus į „at“.
Noriu paleisti scenarijų tam tikru laiku ir įdėti
adresu -f /home/mi_user/Desk/script.sh 18:08 pavyzdys
ir scenarijus nevykdomas ekrane, tai yra terminale, ar jis vykdomas fone?
Su „cron“ tas pats nutinka ir man, aš redaguoju „crontab“ failą naudodamas „crontab -e“
pabaigoje pridedu šią eilutę:
46 19 my_user /home/mi_user/Desk/script.sh
ir nieko nedaro, nerodo scenarijaus.
Kokie pasiūlymai? Labai ačiū ir atsiprašau už nepatogumus
Kad terminalas pasirodytų, gali tekti paleisti terminalą ir perduoti scenarijų kaip parametrą.
Pavyzdžiui:
lxterminal -e "my_user /home/my_user/Desk/script.sh"
Naudojamas parametras gali skirtis atsižvelgiant į naudojamą terminalo emuliatorių.
Tikiuosi, kad tai pavyks.
Apkabink! Paulius.
Indėlis vertinamas.
10 taškų !!
salu2!!
Labai ačiū, tai man labai padėjo išsiaiškinti kai kuriuos dalykus, visišką ačiū, jei norite gauti daugiau informacijos ar abejonių, eisiu į MAN PAGE, pakartojau sveikinimus.
vyras labai ačiū, aš skaičiau ir išbandžiau pavyzdžius. labai ačiū ... tai labai suprantama. Cheers
Norėdami ištrinti vartotojo darbo sąrašą, naudojau „ubuntu Server 12.04.2 LTS“ ir turimą „crontab“ versiją, crontab -r (ir -l, kaip sakoma šiame vadove). Aišku, tai klausimas dėl versijų.
Kita vertus, kažkada paleidžiau tik „crontab“ ir tai leido man sukurti savo vykdymo failą, tačiau tai nebuvo tas, kuris buvo vykdomas. Veikia tas, kuris yra / etc / crontab. gal kas pasinaudos komentaru.
PS (Aš ieškojau naudodamas „locate“ ir „whereis crontab“, bet jis grąžino tik pirmiau minėtą adresą ir kitą failą, kuris yra užšifruotas, taigi, jei įvykdytas buvo / etc / crontab, bet vykdant komandą crontab -e, atsiras mano su visomis mano apibrėžtomis užduotimis) kur buvo saugomas šis failas '???? Pagarbiai. Aš visada prisijungiu su šaknimi.
Puiku, labai naudinga !!!
Sveiki, norėčiau tai padaryti ………… «15 10 * * * šaknis ifdown eth0»
tai reiškia, kad tam tikru metu tinklo plokštė yra išjungta ... gerai, aš įdėjau ją į crontab ir neveikė ... ... kas čia?
Y saludos Gracias
Jūs praleidote apibrėžimą „pirmadienis“ po pavadinimo „Pridėti užduočių į kryžkelę“
Straipsnis vis dar gražus, cron yra labai naudingas.
Kaip šaunu buvo ta gera žinutė, paklauskite manęs
Jei noriu sekti įrašus, paliktus atlikus užduotis, kur aš galiu tai pamatyti?
yra decdir Noriu pamatyti praeityje atliktų veiksmų istoriją šiame faile ir noriu pamatyti kas jį pakeitė ir datą
Gracias
Noriu patikrinti šio pakeitimo istoriją
kaip aš galiu tai padaryti
Gracias
Labas rytas,
Manau, kad „ubuntu“ scenarijuje suklydote, o vietoj apt-get -y atnaujinimo įdėjote ap-get -y upgrade. (Jūs palikote t).
Pasisveikinimas.
Taip yra. Ačiū!
Apkabink! Paulius
Noriu žinoti, kaip sukurti „cron“ failą, kad galėčiau nurodyti kiekvieno vykdymo laiką, katalogą ir kt.
Ačiū, kad paaiškinote operaciją ir pagrindines „cron“ komandas, kad šiek tiek pasilinksmintumėte.
Kai tik ieškau informacijos bet kuria tema, susijusia su „Gnu / Linux“, galų gale einu ištisai, 90% atvejų visada atrandant geriausią šios puikios bendruomenės pamoką, manau, kad nuo šiol pradėsiu čia ir tada kitur.
saludos
Aciu Sander! Apkabinimas! Paulius.
dom = mėnesio diena
dow = savaitės diena
lengviau, jei bendrauji
Labai ačiū, labai išsami ir gerai paaiškinta.
Tai yra tas pats dalykas, kurį mums davė mano operacinių sistemų mokytojas, aš nieko nekeičiu, dabar matau, kodėl klasė tokia bloga .-. Na, tai suteikia mums namų darbų xD
Numatoma,
Klausimas, ar galima apriboti užduoties trukmę?
Pvz., Turiu užduotį, kuri kartojama kas 5 minutes, kartojant, jei ši užduotis vis dar aktyvi, nužudyk ją ir paleisk dar kartą.
Ačiū,
Marcelo. -
Sveiki, Marcelo!
Manau, kad būtų geriau, jei iškeltumėte šį klausimą mūsų paskambintoje klausimų ir atsakymų tarnyboje Paklauskite „FromLinux“ kad visa bendruomenė galėtų jums padėti išspręsti jūsų problemą.
Apkabinimas, Pablo.
geras postas.
Kas yra komanda, skirta terminalui pridėti užduotis prie crontab (neįvedant crontab ir rankiniu būdu nepridėjus jų „crontab -e“ arba pakeičiant Crontab kitu Crontab su „crontab file“).
Idėja yra sukurti išorinį scenarijų, kad užduotys būtų įtrauktos į crontab
Ačiū
man atrodo, kad galėtumėte naudoti „aidą“, ką tik norite pridėti | katė >> 'cronotab kelias (/ etc / cronotab)' «
Kaip išraiška būtų vykdoma tiksliai kas 3 dienas
Hey.
Turiu problemų vykdydamas „Cron“ darbą.
Aš vykdau šią užduotį su „cronta -e“:
01 * * * * šaknis /home/user/script/mfile.sh
bet užduotis neatlikta. Patikrinau, ar myfile.sh turi vykdymo leidimą ir ar jį vykdantis vartotojas yra root.
Tą pačią užduotį vykdau aplanke / etc / crontab ir iš naujo paleidus paslaugą, ji man taip pat neveikia.
„Myfile.sh“ turinys yra komanda, kuri atnaujina DB, o jei ją vykdau konsolėje, ji veikia.
idėja, kokia gali būti problema?
Duomenų bazės vartotojas gali neturėti visų teisių, todėl pirmiausia turėsite eksportuoti aplinkos kintamuosius iš savo duomenų bazės variklio.
Pavyzdžiui, db2 ši eilutė eis į scenarijaus pradžią
. / home / db2inst1 / sqllib / db2profile
Kita priežastis gali būti ta, kad scenarijus reikalauja ryšio su duomenų baze, užmegzkite ryšį su scenarijuje esančia duomenų baze
Aš nežinojau, kad turiu iš naujo paleisti tvenkinį, kurį laiką su tuo kovojau
Jie žinos, kaip nurodyti, kad užduotis vykdoma kiekvieną mėnesio pabaigą nurodytu laiku .. detaliau tai, kad aš negaliu pasiekti, kaip aš žinau, kad būtų paskutinė kiekvieno mėnesio diena .. ??? Aš turėjau juos užrašyti po vieną, bet kai ateina vasario mėnesio pabaiga, kad tai yra bikitas, man tai yra sudėtinga.
gera diena!!
Kaip sustabdyti procesą, kuris vykdomas crontab?
procesas * …………
Ar gali man padėti? „eu tenho um“ autorius, parašytas minha, neveikia jokiu būdu! Jб dei visi leidimai, o ne konkretus klientas ar vartotojas, kuris gali tai įvykdyti - dažniausiai nieko neatsitinka! Norėčiau sužinoti, ar galite man padėti, kai kurie kiti dalykai neveikia! Vlws
Kaip užduotumėte užduotį atlikti kiekvieną paskutinę mėnesio dieną (dienomis: 31-30-28)?
Kaip žinote, komanda su naudojama norint pakeisti vartotoją konsolėje. Jei naudoju komandą su taip: "jūsų vartotojas" pakeiskite vartotoją, bet nenaudodamas tinkamų "vartotojo" nustatymų, jei paleidžiu su kaip: "su - vartotojas", pakeiskite vartotoją, kuris įkelia vartotojo nustatymus. Naudodamas „cron“ nurodau vartotoją, bet kaip įkelti šio vartotojo konfigūracijas?
O jei noriu tai sustabdyti?
Sveiki,
Aš nežinau, ką darau ne taip, bet aš vykdau veiksmus ir nieko nevykdau. Aš bandžiau:
59 * * * * / usr / bin / gedit
* * * * * / usr / bin / gedit
* * * * * šaknis / usr / bin / gedit
* * * * * usr / bin / test.sh
* * * * * šaknis usr / bin / test.sh
ir visai nieko. Tai nieko nevykdo. Perkraunu ir viskas.
labai ačiū