Cron & crontab, paaiškino

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

Susijęs straipsnis:
Pamoka: įdiekite .tar.gz ir .tar.bz2 paketus

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!“

kaip
Susijęs straipsnis:
Komandos sistemai pažinti (nustatyti aparatinę įrangą ir kai kurias programinės įrangos konfigūracijas)

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:

Ačiū Lucainui!

Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Atsakingas už duomenis: Miguel Ángel Gatón
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.

      Alvaro Ortizas sakė

    Ugh ... šiek tiek painu.

      tonikas sakė

    Trūksta * / 30 (minučių lauke), kuris eina kas 30 minučių ...

         erm3nda sakė

      Tik tai ketinau komentuoti, kol nusprendžiau peržiūrėti komentarus 😀
      Šis modifikatorius yra labai svarbi informacija ir kažkas labai naudinga.

           Kika sakė

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

         Kika sakė

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

      Palaidas sakė

    Sveiki, labai naudinga informacija, siekiant paaiškinti, kaip veikia cron.
    baitai

      Palaidas sakė

    dėl *

      Medžiotojas sakė

    Puiku, ačiū, kad paaiškinote, kaip veikia cron .. padėkime šiek tiek rankos 🙂

      Jokūbas sakė

    Š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

      Agustinas sakė

    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ū!

      naudokime linux sakė

    Ne. Jei gerai prisimenu, turite įdėti / 30 * * * * šakninę Scrip.sh.
    Tai yra, pridėkite / prieš 30.
    Cheers! Paulius.

      Jonathanas sakė

    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

         naudokime linux sakė

      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.

      patrecas sakė

    Indėlis vertinamas.

    10 taškų !!

    salu2!!

      Rodolfo sakė

    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.

      jahir sakė

    vyras labai ačiū, aš skaičiau ir išbandžiau pavyzdžius. labai ačiū ... tai labai suprantama. Cheers

      geovanni sakė

    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.

      Sebastianas sakė

    Puiku, labai naudinga !!!

      : mmm sakė

    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

      miguel sakė

    Jūs praleidote apibrėžimą „pirmadienis“ po pavadinimo „Pridėti užduočių į kryžkelę“

    Straipsnis vis dar gražus, cron yra labai naudingas.

      „OScar“ sakė

    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

      Oskaras sakė

    Noriu patikrinti šio pakeitimo istoriją

    kaip aš galiu tai padaryti

    Gracias

      Andresas Ledo sakė

    Labas rytas,

    Manau, kad „ubuntu“ scenarijuje suklydote, o vietoj apt-get -y atnaujinimo įdėjote ap-get -y upgrade. (Jūs palikote t).

    Pasisveikinimas.

         naudokime linux sakė

      Taip yra. Ačiū!
      Apkabink! Paulius

      gabriel sakė

    Noriu žinoti, kaip sukurti „cron“ failą, kad galėčiau nurodyti kiekvieno vykdymo laiką, katalogą ir kt.

      Valentinas sakė

    Ačiū, kad paaiškinote operaciją ir pagrindines „cron“ komandas, kad šiek tiek pasilinksmintumėte.

      Pjūklai sakė

    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

         naudokime linux sakė

      Aciu Sander! Apkabinimas! Paulius.

      Daryo sakė

    dom = mėnesio diena
    dow = savaitės diena
    lengviau, jei bendrauji

      Pascual sakė

    Labai ačiū, labai išsami ir gerai paaiškinta.

      Maksilija sakė

    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

      Marcelo sakė

    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. -

         naudokime linux sakė

      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.

      aj sakė

    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ū

         David sakė

      man atrodo, kad galėtumėte naudoti „aidą“, ką tik norite pridėti | katė >> 'cronotab kelias (/ etc / cronotab)' «

      Rafaelis Vera sakė

    Kaip išraiška būtų vykdoma tiksliai kas 3 dienas

      José Antonio sakė

    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?

         Fredas sakė

      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

      LA3 sakė

    Aš nežinojau, kad turiu iš naujo paleisti tvenkinį, kurį laiką su tuo kovojau

      Kenija sakė

    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.

      Jėzus sakė

    gera diena!!

    Kaip sustabdyti procesą, kuris vykdomas crontab?

      Jėzus sakė

    procesas * …………

      Julianna sakė

    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

      Anthox sakė

    Kaip užduotumėte užduotį atlikti kiekvieną paskutinę mėnesio dieną (dienomis: 31-30-28)?

      tfercho sakė

    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?

      Apiplėšti sakė

    O jei noriu tai sustabdyti?

      reg sakė

    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.

      Ferqos sakė

    labai ačiū