Cron & crontab, shpjegoi

Lucain ai botoi pak me pare tutorial i shkëlqyeshëm për cron dhe crontab që mendoj se ia vlen të ndahet. Cron është një lloj ekuivalent me Detyrat e Planifikuara në Windows, vetëm se trajtohet nga terminali. Ata që preferojnë një ndërfaqe vizuale për të arritur të njëjtin qëllim, mund ta shohin këtë një artikull tjetër.

Çfarë është cron?

Emri cron vjen nga greqishtja chronos që do të thotë "kohë". Në sistemin operativ Unix, cron është një menaxher i rregullt i procesit të sfondit (daemon) që ekzekuton procese ose skripta në intervale të rregullta (për shembull, çdo minutë, ditë, javë ose muaj). Proceset që duhet të ekzekutohen dhe koha në të cilën ato duhet të ekzekutohen specifikohen në skedarin crontab.

Si funksionon

Cron daemon fillon nga /etc/rc.d/ o /etj/init.d në varësi të shpërndarjes. Cron ekzekutohet në sfond, kontrollon tryezën e detyrave të crontab çdo minutë / etj / crontab/ var / rrotull / cron në kërkim të detyrave që duhen realizuar. Si përdorues mund të shtojmë komanda ose skripta me detyra për të cron për të automatizuar disa procese. Kjo është e dobishme për shembull për të automatizuar azhurnimin e një sistemi ose të një sistemi të mirë rezervë.

Artikulli i lidhur:
Udhëzues: Instalo paketat .tar.gz dhe .tar.bz2

Çfarë është Crontab?

Crontab është një skedar i thjeshtë teksti që ruan një listë të komandave që do të ekzekutohen në një kohë të specifikuar nga përdoruesi. Crontab do të kontrollojë datën dhe kohën kur skenari ose komanda duhet të ekzekutohet, lejet e ekzekutimit dhe do ta bëjë atë në sfond. Secili përdorues mund të ketë skedarin e tij crontab, në fakt / etj / crontab Supozohet të jetë skedari crontab i përdoruesit rrënjë, kur përdoruesit normalë (dhe madje edhe root) duan të gjenerojnë skedarin e tyre crontab atëherë ne do të përdorim komandën crontab.

Crontab është mënyra më e lehtë për të menaxhuar detyrat e cron në sistemet me shumë përdorues, ose si një përdorues i thjeshtë i sistemit ose përdorues i rrënjës.

Përdorimi i crontab

Po fillojmë me një shembull të thjeshtë.

Ne do të automatizojmë azhurnimin e një sistemi, për të eleminuar bezdisjen e "Unë gjithmonë duhet të azhurnoj dhe nuk më pëlqen kjo!"

Artikulli i lidhur:
Komandat për të njohur sistemin (identifikoni harduerin dhe disa konfigurime softuerësh)

Para së gjithash ne do të bëjmë një skenar. Ky skript do të thirret me cron dhe do të përmbajë të gjitha udhëzimet që duam të bëjë, prandaj është e nevojshme ta provoni atë në disa raste dhe në disa mënyra para se ta përfshini në cron, një skenar i thjeshtë azhurnimi si ky:

#! / bin / bash # shembulli i azhurnimit të skriptit # zgjidh shpërndarjen tënde # debian-ubuntu # azhurnimi i apt-marrjes & azhurnimi i apt-get -y #fedora # azhurnimi yum-yt # Arch #pacman --noconfirm -Syu

Hiqni # nga linja juaj distro. Në rast se është Ubuntu / Debian, fillon me apt-get.

Ne e ruajmë skenarin si update.sh (p.sh. direktoria e skripteve shtëpinë tuaj). Ne ndryshojmë lejet e ekzekutimit të skenarit të përmendur me:

chmod a + x ~ / skriptet / azhurnimi.sh

Ne e ekzekutojmë skriptin disa herë për të verifikuar që gjithçka funksionon normalisht, ne modifikojmë atë që është e nevojshme (nuk duhet të përmbajë gabime, nëse jo cron do të përsërisë vetëm një gabim pa pushim). Tani për të shtuar detyrën në crontab tonë.

Shto detyra në crontab

Ne ekzekutojmë botimin e crontab me crontab -e, në disa distros (si ubuntu) na jep mundësinë të zgjedhim redaktuesin e tekstit që duam, pjesën tjetër na mbetet vi. Skedari crontab do të duket diçka e tillë.

# mh dom komanda e përdoruesit

ku:

  • m korrespondon me minutën kur skenari do të ekzekutohet, vlera varion nga 0 në 59
  • h koha e saktë, trajtohet formati 24-orësh, vlerat variojnë nga 0 në 23, me 0 që është 12:00 mesnatë.
  • dom i referohet ditës së muajit, për shembull mund të specifikoni 15 nëse doni të vraponi çdo 15 ditë
  • Dow do të thotë dita e javës, mund të jetë numerike (0 deri 7, ku 0 dhe 7 janë e diela) ose 3 shkronjat e para të ditës në anglisht: mon, tue, wed, thu, fri, sat, sun.
  • përdorues përcakton përdoruesin i cili do të ekzekutojë komandën, mund të jetë root, ose një përdorues tjetër për sa kohë që ata kanë leje për të ekzekutuar skriptin.
  • komandë i referohet komandës ose rrugës absolute të skenarit që do të ekzekutohet, shembull: /home/usuario/scriptts/actualizar.sh, nëse e quan një skenar, duhet të ekzekutohet

Për të qenë të qartë disa shembuj të detyrave të cronit të shpjeguara:

15 10 * * * përdoruesi /home/user/scripts/update.sh

Do të ekzekutojë skriptin e update.sh në 10:15 çdo ditë

15 22 * * * përdoruesi /home/user/scripts/update.sh

Do të ekzekutojë skriptin e update.sh në 10:15 pasdite çdo ditë

00 10 * * 0 azhurnim root apt-get -y Përdorues i rrënjës

Do të zhvillojë një azhurnim çdo të Dielë në 10:00 të mëngjesit

45 10 * * azhurnimi i rrënjës së diellit apt-get -y

Përdoruesi i rrënjës do të ekzekutojë një azhurnim çdo të Dielë (Diell) në 10:45 të mëngjesit

30 7 20 11 * përdoruesi /home/usuario/scripts/update.sh

Më 20 nëntor në orën 7:30 përdoruesi do të ekzekutojë skenarin

30 7 11 11 përdorues dielli /home/usuario/scripts/pastel_con_velitas.sh

Më 11 nëntor në 7:30 të mëngjesit dhe kjo është e diela, përdoruesi do të festojë sysadmin e tij (domethënë unë)

01 * * * * përdoruesi /home/usuario/scripts/molestorecordatorio.sh

Një kujtesë e bezdisshme çdo minutë e çdo orë çdo ditë (NUK rekomandohet).

Ato ende mund të trajtohen vargjet speciale:

30 17 * * 1,2,3,4,5

Në orën 5:30 të pasdites çdo ditë nga e hëna në të premte.

00 12 1,15,28 * *

Në 12 të mesditës çdo të parë, pesëmbëdhjetë dhe 28 të çdo muaji (ideal për listën e pagave)

Nëse kjo është konfuze, trajton crontab vargjet speciale për të përcaktuar këto diapazone.

@reboot Vrapo një herë, në fillim
@ fillon herët vetëm një herë në vit: 0 0 1 1 *
@ çdo vit njësoj si @ herët
@mujore ekzekutohet një herë në muaj, ditën e parë: 0 0 1 * *
@ çdo javë Javë minutën e parë të orës së parë të javës. 0 0 * * 0.
@ditë çdo ditë, në 12:00 A.M. 0 0 * * *
@ mesnate njelloj si @daily
@ orë në minutën e parë të çdo ore: 0 * * * *

Përdorimi i tij është shumë i thjeshtë.

@ përdorues në orë /home/user/scripts/molestorecordatorio.sh @ përdorues mujor /home/user/scripts/backup.sh @ përditësim root apt-get update && apt-get -y upgrade

E fundit por jo më pak e:

Menaxhimi i punës në Cron

skedari crontab

Zëvendësoni skedarin ekzistues crontab me një skedar të përcaktuar nga përdoruesi

crontab -e

Redaktoni skedarin crontab të përdoruesit, çdo rresht i ri do të jetë një detyrë e re crontab.

crontab -l

Renditni të gjitha detyrat e përdoruesit crontab

crontab -d

Fshi crontab-in e përdoruesit

crontab -c drejt

Përcakton direktorinë crontab të përdoruesit (kjo duhet të ketë leje të përdoruesit për të shkruar dhe ekzekutuar)

crontab -u përdorues

parashtesa për të trajtuar crontab-in e një përdoruesi tjetër, shembuj:

$ sudo crontab -l -u rrënjë $ sudo crontab -e përdorues2 #crontab -d -u përdorues

Ky mjet, si shumë të tjerë, mund të shihet më thellë dhe më në detaje në:

Faleminderit Lucain!

Përmbajtja e artikullit i përmbahet parimeve tona të etika editoriale. Për të raportuar një gabim klikoni këtu.

48 komente, lini tuajën

Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.

  1.   Imazhi i mbajtësit të vendit Alvaro Ortiz dijo

    Uf ... pak konfuze.

  2.   tonik dijo

    * / 30 mungon (në fushën e minutave) që ekzekutohet çdo 30 minuta ...

    1.    erm3nda dijo

      Vetëm këtë do të komentoja derisa vendosa të rishikoj komentet
      Ky modifikues është një informacion shumë i rëndësishëm dhe diçka shumë e dobishme.

      1.    KIKA dijo

        Hello!
        Tani për tani po testoj një konfigurim çdo 45 minuta.

        * / 45 * * * *, dhe udhëzimi ekzekutohet në 45 minuta të çdo ore DHE çdo orë. Kjo do të thotë:

        Shkon në 3:45, pastaj 4:00, 4:45, pastaj 5:00, 5:45, 6:00, 6:45, etj.

        Kam diçka të gabuar? Çfarë mund të bëj për ta bërë atë vetëm çdo 45 minuta, ose të paktën një herë në 45 minuta çdo orë.

    2.    KIKA dijo

      Hello!
      Tani për tani po testoj një konfigurim çdo 45 minuta.

      * / 45 * * * *, dhe udhëzimi ekzekutohet në 45 minuta të çdo ore DHE çdo orë. Kjo do të thotë:

      Shkon në 3:45, pastaj 4:00, 4:45, pastaj 5:00, 5:45, 6:00, 6:45, etj.

      Kam diçka të gabuar? Çfarë mund të bëj për ta bërë atë vetëm çdo 45 minuta, ose të paktën një herë në 45 minuta çdo orë.

  3.   I plogët dijo

    Përshëndetje informacion shumë i dobishëm për të sqaruar se si funksionon cron.
    bytes

  4.   I plogët dijo

    per *

  5.   Gjahtar dijo

    Shkëlqyeshëm, faleminderit që sqaruat se si funksionon cron .. le të vëmë pak dorë

  6.   Jacob dijo

    Kjo linjë siç e kuptoj se do të ekzekutohet në 10:15 pasdite, më korrigjoni nëse gaboj
    Epo atje thotë 10:15 e mëngjesit
    15 22 * * * përdoruesi /home/user/scripts/update.sh

  7.   Agustin dijo

    Përshëndetje! informacion shumë i mirë
    Për të ekzekutuar një Script çdo gjysmë ore, rreshti që duhet të shtohet në CronTab do të ishte: "30 * * * * root Scrip.sh" E saktë? Shume faleminderit!

  8.   le të përdorim linux dijo

    Jo. Nëse më kujtohet saktë, për këtë duhet të vendosni / 30 * * * * root Scrip.sh.
    Kjo është, shtoni / para 30.
    Gëzuar! Paul.

  9.   Jonathan dijo

    Përshëndetje më pëlqeu postimi juaj, është shumë i plotë por doja t'ju pyesja diçka.
    Unë kam probleme me këtë komandë dhe një si "në".

    Unë dua të ekzekutoj një skenar në një kohë të caktuar dhe ta vendos

    në -f /home/mi_user/Desk/script.sh 18:08 shembull

    dhe skenari nuk ekzekutohet në ekran, domethënë në terminal, a ekzekutohet në sfond?

    Dhe me cron më ndodh e njëjta gjë, unë redaktoj skedarin crontab me "crontab -e"

    në fund shtoj këtë rresht:

    46 19 my_user /home/mi_user/Desk/script.sh

    dhe nuk bën asgjë, nuk tregon skenarin.

    Ndonjë sugjerim? Ju faleminderit shumë dhe kërkoni falje për shqetësimet

    1.    le të përdorim linux dijo

      Që të shfaqet terminali, mund t'ju duhet të ekzekutoni terminalin dhe të kaloni skriptin si një parametër.

      Për shembull:

      lxterminal -e "my_user /home/mi_user/Desktop/script.sh"

      Parametri për t'u përdorur mund të ndryshojë bazuar në emulatorin e terminalit që përdorni.

      Shpresoj se funksionon.

      Perqafo! Paul.

  10.   patreta dijo

    Kontributi vlerësohet.

    10 pikë !!

    salu2 !!

  11.   Rodolfo dijo

    Faleminderit shumë, më ndihmoi shumë për të sqaruar disa gjëra, faleminderit gjithsej, për më shumë detaje ose pyetje do të shkoj në FAQEN E MAN, përsërita përshëndetjet.

  12.   xhahir dijo

    Xhaxhi faleminderit shumë, kam lexuar dhe testuar shembujt. faleminderit shumë ... është shumë e kuptueshme Brohoritje

  13.   Geovanni dijo

    Kam përdorur ubuntu Server 12.04.2 LTS dhe versionin e crontab që kam, për të fshirë listën e punëve të përdoruesit është përdorur, crontab -r (dhe -l, siç thotë ky manual). Sigurisht që bëhet fjalë për versione.

    Nga ana tjetër, unë një herë kam ekzekutuar vetëm crontab dhe kjo lloj më lejoni të krijoj dosjen time të ekzekutimit, por kjo nuk ishte ajo që po ekzekutohej. Ai që ekzekutohet është ai në / etj / crontab. mbase dikush do ta përdorë komentin.

    PS (Unë kërkova me lokalizimin dhe ku është crontab por ajo ktheu vetëm adresën e lartpërmendur dhe një skedar tjetër që është i koduar, kështu që nëse ai që u ekzekutua ishte ai në / etc / crontab, por kur ekzekutonte komandën crontab -e, imi u shfaq me të gjitha punët që kisha përcaktuar) ku po ruhej kjo skedar '???? Të fala. Unë gjithmonë futem me root.

  14.   Sebastian dijo

    E shkëlqyeshme, shumë e dobishme !!!

  15.   mmm dijo

    Përshëndetje, unë do të doja ta bëja këtë ………… «15 10 * * * root ifdown eth0»

    kjo do të thotë që në një kohë të caktuar karta e rrjetit është e fikur ... mirë, unë e vendosa atë në crontab dhe nuk funksionoi ... çfarë ka?

    Përshëndetje dhe faleminderit

  16.   Miguel dijo

    Ke humbur përcaktimin e "mon" pas titullit "Shto detyra në crontab"

    Artikulli është akoma i këndshëm, cron është jashtëzakonisht i dobishëm.

  17.   OScar dijo

    Sa interesant ishte ai post i mirë, më pyesni
    Nëse dua të mbaj të dhënat e lëna nga ekzekutimi i detyrave, ku mund ta shoh?

    është të vendos që unë dua të shoh historinë e veprimeve të bëra në të kaluarën e kësaj skedari dhe dua të shoh kush e ka modifikuar atë dhe datën

    falënderim

  18.   Oscar dijo

    Unë dua të kontrolloj historinë e modifikimit të kësaj

    si mund ta bej

    falënderim

  19.   Andres Ledo dijo

    Mirëmëngjesi,

    Unë mendoj se në skenarin ubuntu keni bërë një gabim, ju keni vendosur azhurnimin ap-get -y në vend të azhurnimit apt-get -y. (Ju keni lënë një t).

    Një përshëndetje.

    1.    le të përdorim linux dijo

      Po kështu. Faleminderit!
      Perqafo! Paul

  20.   Gabriel dijo

    Dua të di se si të krijoj një skedar cron për të qenë në gjendje të specifikoj kohën secila kur ekzekutohet, direktorinë, etj.

  21.   Valentin dijo

    Faleminderit për sqarimin e operacionit dhe komandat themelore për cron, tani për të argëtuar veten për pak.

  22.   Sander dijo

    Sa herë që kërkoj informacion në lidhje me ndonjë temë që lidhet me Gnu / Linux, shkoj rreth e rrotull për të gjetur gjithnjë në 90% të rasteve mësimin më të mirë në këtë komunitet të shkëlqyeshëm, mendoj se tani e tutje do të filloj këtu dhe pastaj diku tjetër.

    të fala

    1.    le të përdorim linux dijo

      Faleminderit Sander! Nje perqafim! Paul.

  23.   daryo dijo

    dom = dita e muajit
    dow = dita e javes
    është më lehtë nëse shoqërohesh

  24.   Pascual dijo

    Faleminderit shumë, shumë i plotë dhe i shpjeguar mirë.

  25.   Maksilia dijo

    Kjo është e njëjta gjë që na dha mësuesi im i Sistemeve Operative, unë nuk ndryshoj asgjë, tani shoh pse klasa është kaq e keqe .-. Epo, kjo është e njëjtë me detyrat e shtëpisë xD

  26.   Marcelo dijo

    Vlerësuar,

    Kërkoni, a mund të kufizohet kohëzgjatja e një detyre?
    Për shembull, unë kam një detyrë që përsëritet çdo 5 minuta, në përsëritje nëse ajo detyrë është aktive, le ta vrasë dhe ekzekutoje përsëri.

    Thanks,
    Marcelo.-

    1.    le të përdorim linux dijo

      Përshëndetje, Marcelo!

      Unë mendoj se do të ishte më mirë nëse ju e ngrini këtë pyetje në shërbimin tonë të pyetjeve dhe përgjigjeve të thirrur Pyesni FromLinux në mënyrë që i gjithë komuniteti t'ju ndihmojë në zgjidhjen e problemit tuaj.

      Një përqafim, Pablo.

  27.   aj dijo

    post i mbare
    Cila është komanda për terminal për të shtuar detyrat në crontab (pa hyrë në crontab dhe shtimi i tyre manualisht me 'crontab -e' ose zëvendësimi i crontab me një crontab tjetër me 'skedar crontab').
    Ideja është të krijoni një skenar të jashtëm për të shtuar detyrat në crontab
    Falënderim

    1.    david dijo

      Unë mendoj se ju mund të përdorni "echo" çdo gjë që dëshironi të shtoni "| mace >> 'rruga cronotab (/ etj / cronotab)' «

  28.   Rafael Vera dijo

    Si do të ekzekutohej një shprehje çdo 3 ditë saktësisht

  29.   José Antonio dijo

    Hey.

    Kam një problem në ekzekutimin e një pune cron.

    Unë drejtoj detyrën vijuese me cronta -e:

    01 * * * * root /home/user/script/mfile.sh

    por detyra nuk është bërë. Unë kam verifikuar që myfile.sh ka leje ekzekutimi dhe se përdoruesi që e ekzekuton atë është root.

    Unë ekzekutoj të njëjtën detyrë në / etc / crontab dhe pasi të rifilloj shërbimin, nuk funksionon as për mua.
    Përmbajtja e myfile.sh është një komandë që azhurnon një DB dhe nëse e ekzekutoj në tastierë funksionon.
    ndonjë ide se cili mund të jetë problemi?

    1.    Fredi dijo

      Likelyshtë e mundshme që përdoruesi i bazës së të dhënave nuk i ka të gjitha lejet dhe së pari do të duhet të eksportoni variablat e mjedisit nga motori juaj i bazës së të dhënave.
      Për shembull në db2 kjo linjë do të shkojë në fillim të skenarit
      . / shtëpi / db2inst1 / sqllib / db2profile

      Një shkak tjetër mund të jetë që skenari kërkon lidhje me bazën e të dhënave, të bëjë lidhjen me bazën e të dhënave brenda skriptit

  30.   LA3 dijo

    Unë nuk e dija se duhej të rifilloja copën, unë isha duke luftuar me këtë për një kohë

  31.   kenia dijo

    Ata do të dinë të tregojnë se detyra është ekzekutuar çdo fund të muajit, në kohën e treguar .. detaji është se nuk mund ta arrij se si e di që merr ditën e fundit të çdo muaji .. ??? Unë u detyrova t'i shkruaj një nga një, por kur vjen fundi i muajit shkurt se është biciesto është e komplikuar për mua ..

  32.   Jezu dijo

    diten e mire!!

    Si mund ta ndaloj procesin që po ekzekutohet në crontab?

  33.   Jezu dijo

    procesi *

  34.   Julianna dijo

    Mund të jetë që ju mund të më ndihmoni? skenari eu tenho um nga minha autori që nuk funksionon asnjë crontab! Jb dei të gjitha lejet, jo një cron ose përdorues specifik që mund ta ekzekutojë - asgjë nuk ndodh! Do të doja të dija nëse mund të më ndihmoni, disa gjëra të tjera nuk funksionojnë! Vlws

  35.   Antoks dijo

    Si do ta vendosnit një detyrë për të ekzekutuar çdo ditë të fundit të muajit (ditët: 31-30-28)?

  36.   tferço dijo

    Siç e dini tashmë, komanda su përdoret për të ndryshuar përdoruesin në një tastierë. Nëse unë përdor komandën su kështu: "përdoruesi yt" ndryshon përdoruesin por pa cilësimet e duhura të "përdoruesit", nëse ekzekutoj su si: "përdorues i vetë" ndrysho përdoruesin duke ngarkuar cilësimet e përdoruesit. Me cron tregoj përdoruesin, por si mund t'i ngarkoj cilësimet e këtij përdoruesi?

  37.   Rob dijo

    Dhe nëse dua ta ndaloj?

  38.   Regji dijo

    Përshëndetje,
    Nuk e di se çfarë po bëj keq, por ndjek hapat dhe asgjë nuk ekzekutohet. E kam Provuar:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * rrënjë usr / bin / test.sh

    dhe asgjë fare. Nuk ekzekuton asgjë. Unë kam rebootuar dhe gjithçka.

  39.   Ferqos dijo

    thank you very much