Cron & crontab, ipinaliwanag

Lucaine nai-publish kanina mahusay na tutorial sa cron at crontab na sa tingin ko ay sulit na ibahagi. Ang Cron ay isang uri ng katumbas ng Nakaiskedyul na Mga Gawain sa Windows, tanging iyon lang ang hinahawakan mula sa terminal. Ang mga mas gusto ang isang visual interface upang makamit ang parehong layunin, makikita ito isa pang artikulo.

Ano ang cron?

Ang pangalang cron ay nagmula sa Greek kronos na nangangahulugang "oras". Sa operating system ng Unix, ang cron ay isang regular na tagapamahala ng proseso ng background (daemon) na nagpapatakbo ng mga proseso o script sa mga regular na agwat (halimbawa, bawat minuto, araw, linggo, o buwan). Ang mga proseso na dapat ipatupad at ang oras kung saan dapat silang isagawa ay tinukoy sa crontab file.

Como funciona

Ang cron daemon ay nagsisimula sa /etc/rc.d/ o /etc/init.d depende sa pamamahagi. Tumatakbo ang Cron sa background, sinusuri ang talahanayan ng gawain ng crontab bawat minuto / etc / crontab o en / var / spool / cron sa paghahanap ng mga gawain na naisasagawa. Bilang isang gumagamit maaari kaming magdagdag ng mga utos o script na may mga gawain upang i-automate ang ilang mga proseso. Kapaki-pakinabang ito halimbawa upang i-automate ang pag-update ng isang system o isang mahusay na backup system.

Kaugnay na artikulo:
Tutorial: I-install ang .tar.gz at .tar.bz2 Packages

Ano ang Crontab?

Ang Crontab ay isang simpleng file ng teksto na nag-iimbak ng isang listahan ng mga utos na naisakatuparan sa isang oras na tinukoy ng gumagamit. Susuriin ng Crontab ang petsa at oras kung kailan dapat isagawa ang script o utos, ang mga pahintulot sa pagpapatupad at gagawin ito sa likuran. Ang bawat gumagamit ay maaaring magkaroon ng kanilang sariling crontab file, sa katunayan ang / etc / crontab ipinapalagay na crontab file ng root ng gumagamit, kapag ang mga normal na gumagamit (at kahit na ang ugat) ay nais na bumuo ng kanilang sariling crontab file pagkatapos ay gagamitin namin ang crontab command.

Ang Crontab ay ang pinakamadaling paraan upang pamahalaan ang mga gawain sa cron sa mga multi-user system, alinman bilang isang simpleng gumagamit ng system o root user.

Paggamit ng crontab

Nagsisimula kami sa isang simpleng halimbawa.

Isasaayos namin ang pag-update ng isang system, upang maalis ang nakakainis na "Palagi kong kailangang mag-update at hindi ko gusto iyon!

kung paano i-
Kaugnay na artikulo:
Nag-uutos na malaman ang system (kilalanin ang hardware at ilang mga pagsasaayos ng software)

Una sa lahat gagawa kami ng isang script. Ang script na ito ay tatawagin ng cron at maglalaman ng lahat ng mga tagubiling nais naming gawin, samakatuwid kinakailangan na subukan ito sa maraming mga kaso at sa maraming paraan bago isama ito sa cron, isang simpleng script sa pag-update na tulad nito:

#! / bin / bash #script update halimbawa #piliin ang iyong pamamahagi # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Alisin ang # mula sa iyong distro line. Kung sakaling ito ay Ubuntu / Debian, nagsisimula ito sa apt-get.

Nai-save namin ang script bilang update.sh (hal. Direktoryo ng mga script ang iyong tahanan). Binabago namin ang mga pahintulot sa pagpapatupad ng nasabing script sa:

chmod a + x ~ / script / update.sh

Isinasagawa namin ang script ng maraming beses upang ma-verify na ang lahat ay tumatakbo nang maayos, binabago namin kung ano ang kinakailangan (hindi ito dapat maglaman ng mga error, kung hindi man ay uulit-ulitin lamang ng cron ang isang error nang paulit-ulit). Ngayon upang idagdag ang gawain sa aming crontab.

Magdagdag ng mga gawain sa crontab

Isinasagawa namin ang edisyon ng crontab na may crontab -e, sa ilang mga distrito (tulad ng ubuntu) binibigyan nito kami ng pagpipilian upang piliin ang text editor na gusto namin, ang natitira ay naiwan sa amin ng vi. Ang crontab file ay magmumukhang ganito.

# mh dom mon dow utos ng gumagamit

kung saan:

  • m tumutugma sa minutong ang script ay naisakatuparan, ang halaga ay umaabot mula 0 hanggang 59
  • h ang eksaktong oras, ang 24-oras na format ay hawakan, ang mga halaga ay umaabot mula 0 hanggang 23, na ang 0 ay nasa alas-12 ng hatinggabi.
  • regalo tumutukoy sa araw ng buwan, halimbawa maaari mong tukuyin ang 15 kung nais mong tumakbo tuwing 15 araw
  • dow nangangahulugang ang araw ng linggo, maaari itong maging bilang (0 hanggang 7, kung saan ang 0 at 7 ay Linggo) o ang unang 3 mga titik ng araw sa Ingles: mon, tue, wed, thu, pray, sat, sun.
  • gumagamit tinutukoy ang gumagamit na magpapatupad ng utos, maaari itong maging ugat, o ibang gumagamit basta mayroon silang mga pahintulot na ipatupad ang script.
  • utos tumutukoy sa utos o sa ganap na landas ng script na naisasagawa, halimbawa: /home/usuario/scripts/update.sh, kung tumatawag ito ng isang script dapat itong maipatupad

Upang maging malinaw ang ilang mga halimbawa ng mga gawain sa cron na ipinaliwanag:

15 10 * * * user /home/user/scripts/update.sh

Patakbuhin nito ang update.sh script nang 10:15 am araw-araw

15 22 * * * user /home/user/scripts/update.sh

Patakbuhin nito ang update.sh script sa 10:15 pm araw-araw

00 10 * * 0 root apt-get -y i-update ang Root user

Magpapatakbo ito ng pag-update tuwing Linggo ng 10:00 ng umaga

45 10 * * root sun apt-get -y update

Ang Root user ay magpapatakbo ng isang pag-update tuwing Linggo (Araw) ng 10:45 ng umaga

30 7 20 11 * gumagamit / home /usuario/scripts/update.sh

Sa Nobyembre 20 ng 7:30 tatakbo ang gumagamit ng script

30 7 11 11 sun user /home/usuario/scripts/pastel_con_velitas.sh

Sa Nobyembre 11 ng 7:30 ng umaga at iyon ay Linggo, ipagdiriwang ng gumagamit ang kanyang sysadmin (iyon ay, ako)

01 * * * * gumagamit / home /usuario/scripts/molestorecordatorio.sh

Isang nakakainis na paalala bawat minuto ng bawat oras araw-araw (HINDI inirerekomenda).

Maaari pa silang hawakan mga espesyal na saklaw:

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

Sa 5:30 ng hapon araw-araw mula Lunes hanggang Biyernes.

00 12 1,15,28 **

Sa alas-12 ng tanghali sa una, ikalabinlim at ika-28 ng bawat buwan (mainam para sa payroll)

Kung nakalilito ito, humahawak ang crontab mga espesyal na string upang tukuyin ang mga saklaw na ito.

@reboot Patakbuhin nang isang beses, sa pagsisimula
Tumatakbo lamang si @yearly isang beses sa isang taon: 0 0 1 1 *
@manwal na kapareho ng @ taon
@monthly tumatakbo isang beses sa isang buwan, ang unang araw: 0 0 1 * *
@weekly Lingguhan ang unang minuto ng unang oras ng linggo. 0 0 * * 0 ″.
@ araw-araw araw-araw, sa 12:00 A.M. 0 0 * * *
@midnight parehas ng @daily
@ oras sa unang minuto ng bawat oras: 0 * * * *

Napakadali ng paggamit nito.

@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade

Huling ngunit hindi huli:

Pamamahala sa trabaho sa Cron

file ng crontab

Palitan ang umiiral na crontab file ng isang file na tinukoy ng gumagamit

crontab -e

I-edit ang crontab file ng gumagamit, ang bawat bagong linya ay magiging isang bagong gawain sa crontab.

crontab -l

Ilista ang lahat ng mga gawain sa crontab ng gumagamit

crontab -d

Tanggalin ang crontab ng gumagamit

crontab -c dir

Tinutukoy ang direktoryo ng crontab ng gumagamit (dapat itong may sulat ng gumagamit at magpatupad ng mga pahintulot)

crontab -u gumagamit

awalan upang hawakan ang crontab ng ibang gumagamit, mga halimbawa:

$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u user

Ang tool na ito, tulad ng marami pang iba, ay maaaring makita nang mas malalim at mas detalyado sa:

Salamat Lucain!

Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.

  1.   Larawan ng placeholder ng Alvaro Ortiz dijo

    Ugh ... medyo nakalilito.

  2.   gamot na pampalakas dijo

    * / 30 ay nawawala (sa patlang ng minuto) na tumatakbo bawat 30 minuto ...

    1.    erm3nda dijo

      Lamang ito ay magkomento ako hanggang sa magpasya akong suriin ang mga komento 😀
      Ang modifier na ito ay isang napakahalagang impormasyon at isang bagay na napaka kapaki-pakinabang.

      1.    Kika dijo

        Hello!
        Sa ngayon sinusubukan ko ang isang pagsasaayos bawat 45 minuto.

        * / 45 * * * *, at ang tagubilin ay naisasagawa sa 45 minuto ng bawat oras AT bawat oras. Na ibig sabihin:

        Tumatakbo ito sa 3:45, pagkatapos ng 4:00, 4:45, pagkatapos ng 5:00, 5:45, 6:00, 6:45, at iba pa.

        Mayroon akong mali? Ano ang magagawa ko upang magawa ko lamang ito sa bawat 45 minuto, o kahit minsan sa 45 minuto bawat oras.

    2.    Kika dijo

      Hello!
      Sa ngayon sinusubukan ko ang isang pagsasaayos bawat 45 minuto.

      * / 45 * * * *, at ang tagubilin ay naisasagawa sa 45 minuto ng bawat oras AT bawat oras. Na ibig sabihin:

      Tumatakbo ito sa 3:45, pagkatapos ng 4:00, 4:45, pagkatapos ng 5:00, 5:45, 6:00, 6:45, at iba pa.

      Mayroon akong mali? Ano ang magagawa ko upang magawa ko lamang ito sa bawat 45 minuto, o kahit minsan sa 45 minuto bawat oras.

  3.   Walang ingat dijo

    Kumusta sobrang kapaki-pakinabang ng impormasyon upang linawin kung paano gumagana ang cron.
    Bytes

  4.   Walang ingat dijo

    para sa *

  5.   Mangangaso dijo

    Mahusay, salamat sa paglilinaw kung paano gumagana ang cron .. maglagay tayo ng kaunting kamay 🙂

  6.   Jacob dijo

    Ang linyang ito sa pagkakaintindi ko ay papatayin sa 10:15 pm, iwasto ako kung mali ako
    Well doon sinasabi 10:15 am
    15 22 * * * user /home/user/scripts/update.sh

  7.   Agustin dijo

    Kamusta! napakagandang impormasyon.
    Upang maisagawa ang isang Script bawat kalahating oras, ang linya na dapat idagdag sa CronTab ay: "30 * * * * root Scrip.sh" Tama? Maraming salamat!

  8.   gumamit tayo ng linux dijo

    Hindi. Kung naaalala ko nang tama, para doon kailangan mong ilagay / 30 * * * * root Scrip.sh.
    Iyon ay, idagdag ang / bago ang 30.
    Cheers! Paul

  9.   Jonathan dijo

    Kumusta nagustuhan ko ang iyong post, ito ay napaka-kumpleto ngunit nais kong magtanong sa iyo ng isang bagay.
    Nagkakaproblema ako sa utos na ito at ang isa tulad ng "sa".

    Nais kong magpatakbo ng isang script sa isang tiyak na oras at ilagay

    sa -f /home/mi_user/Desk/script.sh 18:08 halimbawa

    at ang script ay hindi naisakatuparan sa screen, iyon ay, sa terminal, ito ay naisakatuparan sa background?

    At sa cron pareho ang nangyayari sa akin, ini-edit ko ang crontab file na may "crontab -e"

    sa dulo idaragdag ko ang linyang ito:

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

    at wala itong ginagawa, hindi nito ipinapakita ang script.

    May anumang mungkahi? Maraming salamat at humihingi ng paumanhin para sa anumang abala

    1.    gumamit tayo ng linux dijo

      Para lumitaw ang terminal, maaaring kailangan mong patakbuhin ang terminal at ipasa ang script bilang isang parameter.

      Por ejemplo:

      lxterminal -e "my_user /home/my_user/Desk/script.sh"

      Ang parameter na gagamitin ay maaaring mag-iba batay sa ginagamit mong terminal emulator.

      Sana gumana ito.

      Yakap! Paul

  10.   patrecas dijo

    Ang kontribusyon ay pinahahalagahan.

    10 puntos!!

    salu2!!

  11.   Rodolfo dijo

    Maraming salamat, malaki ang naitulong nito sa akin upang linawin ang ilang mga bagay, kabuuang salamat, para sa higit pang mga detalye o mga katanungan na pupunta ako sa MAN PAGE, inulit ang mga pagbati.

  12.   jahir dijo

    Tito maraming salamat, binabasa ko at sinusubukan ang mga halimbawa. maraming salamat ... napaka naiintindihan. regards

  13.   geovanni dijo

    Gumamit ako ng ubuntu Server 12.04.2 LTS, at ang bersyon ng crontab na mayroon ako, upang tanggalin ang listahan ng mga trabaho ng gumagamit ay ginagamit, crontab -r (at -l, tulad ng sinasabi ng manwal na ito). Sigurado na ito ay sa pamamagitan ng tanong ng mga bersyon.

    Sa kabilang banda, minsan lang akong nagpatakbo ng crontab at ang ganitong uri ay hinayaan akong lumikha ng aking sariling file ng pagpapatupad, ngunit hindi ito ang isinasagawa. Ang tumatakbo ay ang isa sa / etc / crontab. baka may gumamit ng comment.

    PS (Naghanap ako gamit ang hanapin at kung saan ang crontab ngunit ibinalik lamang nito ang nabanggit na address at isa pang file na naka-encrypt, kaya't kung ang naipatupad ay ang nasa / etc / crontab, ngunit nang ipatupad ang crontab -e command, lumitaw ang aking sa lahat ng mga trabaho na tinukoy ko) kung saan ang file na ito ay naiimbak '???? Pagbati po. Palagi akong nag-log in gamit ang root.

  14.   Sebastian dijo

    Napakahusay, napaka kapaki-pakinabang !!!

  15.   mmm dijo

    Kumusta, nais kong gawin ito ………… «15 10 * * * root ifdown eth0»

    iyon ay, sa isang tiyak na oras ang network card ay naka-off ...……… mabuti, inilagay ko ito sa crontab at hindi ito gumana ...... .. ano na

    Pagbati at salamat

  16.   Miguel dijo

    Hindi mo tinukoy ang "mon" pagkatapos ng pamagat na "Magdagdag ng mga gawain sa crontab"

    Ang artikulo ay maganda pa rin, cron ay lubos na kapaki-pakinabang.

  17.   Oscar dijo

    Gaano kahusay ang magandang post, tanungin mo ako
    Kung nais kong subaybayan ang mga talaang naiwan ng pagpapatupad ng mga gawain, saan ko ito makikita?

    ay decdir Nais kong makita ang kasaysayan ng mga pagkilos na ginawa sa nakaraan ng file na ito at nais kong makita kung sino ang nagbago nito at ang petsa

    salamat

  18.   Oscar dijo

    Nais kong suriin ang kasaysayan ng pagbabago ng ito

    paano ko ito magagawa

    salamat

  19.   Andres Ledo dijo

    Magandang umaga,

    Sa palagay ko na sa script ng ubuntu ay nagkamali ka, inilagay mo ang ap-get -y pag-upgrade sa halip na apt-get -y upgrade. (Naiwan mo ang isang t).

    Isang pagbati.

    1.    gumamit tayo ng linux dijo

      Ganun din. Salamat!
      Yakap! Paul

  20.   Gabriel dijo

    Nais kong malaman kung paano lumikha ng isang cron file upang matukoy ang oras bawat isa kapag ito ay naisakatuparan, ang direktoryo, atbp.

  21.   Valentin dijo

    Salamat sa paglilinaw ng operasyon at mga pangunahing utos para sa cron, ngayon upang aliwin ang iyong sarili nang kaunti.

  22.   Sander dijo

    Tuwing naghahanap ako ng impormasyon sa anumang paksang nauugnay sa Gnu / Linux, paikot-ikot ako upang palaging makita sa 90% ng mga kaso ang pinakamahusay na tutorial sa mahusay na pamayanan, sa palagay ko mula ngayon ay magsisimula ako dito at pagkatapos sa ibang lugar.

    Regards

    1.    gumamit tayo ng linux dijo

      Salamat Sander! Isang yakap! Paul

  23.   dario dijo

    dom = araw ng buwan
    dow = araw ng linggo
    mas madali kung makakasama mo

  24.   Pascual dijo

    Maraming salamat, kumpleto at mahusay na naipaliwanag.

  25.   Maxilla dijo

    Ito ang parehong bagay na ibinigay sa amin ng aking guro ng OS, wala akong binabago, ngayon nakikita ko kung bakit napakasama ng klase .-. Well, ito ay kapareho ng takdang-aralin xD

  26.   Marcelo dijo

    Tinantyang,

    Pagtatanong, maaari bang limitado ang tagal ng oras ng isang gawain?
    Halimbawa mayroon akong isang gawain na inuulit ang sarili tuwing 5 minuto, sa pag-uulit kung ang gawaing iyon ay aktibo pa rin, hayaan itong patayin at patakbuhin ito muli.

    Salamat,
    Marcelo.-

    1.    gumamit tayo ng linux dijo

      Kumusta, Marcelo!

      Sa palagay ko mas makakabuti kung itataas mo ang katanungang ito sa aming tanong at sagot na serbisyong tinawag Magtanong DesdeLinux upang matulungan ka ng buong pamayanan sa iyong problema.

      Isang yakap, Pablo.

  27.   aj dijo

    magandang post
    Ano ang utos bawat terminal upang magdagdag ng mga gawain sa crontab (nang hindi ipinasok ang crontab at manu-manong idagdag ang mga ito sa 'crontab -e' o palitan ang crontab ng isa pang crontab na may 'crontab file').
    Ang ideya ay upang lumikha ng isang panlabas na script upang idagdag ang mga gawain sa crontab
    Salamat

    1.    david dijo

      tila sa akin na maaari mong gamitin ang 'echo' kahit anong nais mong idagdag '| pusa >> 'cronotab path (/ etc / cronotab)' «

  28.   Raphael Vera dijo

    Paano tatakbo ang isang expression tuwing 3 araw nang eksakto

  29.   José Antonio dijo

    Hello.

    Mayroon akong problema sa pagpapatupad ng isang cron job.

    Pinapatakbo ko ang sumusunod na gawain sa cronta -e:

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

    ngunit ang gawain ay hindi tapos na. Nasuri ko na ang myfile.sh ay may pahintulot sa pagpapatupad at ang gumagamit na nagpapatupad nito ay ugat.

    Pinapatakbo ko ang parehong gawain sa / etc / crontab at pagkatapos i-restart ang serbisyo, hindi rin ito gagana para sa akin.
    Ang nilalaman ng myfile.sh ay isang utos na nag-a-update ng isang DB at kung patakbuhin ko ito sa console gumagana ito.
    anumang ideya kung ano ang maaaring problema?

    1.    fredd dijo

      Malamang na ang gumagamit ng database ay walang lahat ng mga pahintulot at kailangan mo munang i-export ang mga variable ng kapaligiran mula sa iyong database engine.
      Halimbawa sa db2 ang linya na ito ay pupunta sa simula ng script
      . / home / db2inst1 / sqllib / db2profile

      Ang isa pang dahilan ay maaaring ang script ay nangangailangan ng koneksyon sa database, gawin ang koneksyon sa database sa loob ng script

  30.   LA3 dijo

    Hindi ko alam na kailangan kong i-restart ang crond, nakikipaglaban ako rito saglit

  31.   kenia dijo

    Malalaman nila kung paano ipahiwatig na ang gawain ay pinapatakbo tuwing katapusan ng buwan, sa oras na nakasaad .. ang detalye ay hindi ko makakamit kung paano ko malalaman na tumatagal ang huling araw ng bawat buwan .. ??? Kailangan kong isulat ang mga ito isa-isa ngunit kapag dumating ang pagtatapos ng buwan ng Pebrero na ito ay biciesto ay kumplikado ito para sa akin ..

  32.   Jesus dijo

    magandang araw!!

    Paano ko titigilan ang proseso na isinasagawa sa crontab?

  33.   Jesus dijo

    proseso * …………

  34.   Julianna dijo

    Hindi kaya maaari mo akong tulungan? eu tenho um script ni minha na may-akda na hindi gagana nang walang crontab! Huwag gawin ang lahat ng mga pinahihintulutan, walang pribadong tukoy na cron o gumagamit na maaaring isagawa ito-halos walang nangyari! Nais kong malaman kung maaari mo akong tulungan, ilang iba pang mga bagay na hindi gumagana! Vlws

  35.   Anthox dijo

    Paano mo mailalagay ang isang gawain upang patakbuhin ang bawat huling araw ng buwan (araw: 31-30-28)?

  36.   tfercho dijo

    Tulad ng alam mo, ang utos ng su ay ginagamit upang baguhin ang gumagamit sa isang console. Kung gagamitin ko ang command su ganito: "iyong gumagamit" palitan ang gumagamit ngunit walang tamang mga setting ng "gumagamit", kung tatakbo ako bilang: "su - user" baguhin ang paglo-load ng user ng mga setting ng gumagamit. Sa cron ipinapahiwatig ko ang gumagamit, ngunit paano ko mai-load ang mga setting ng gumagamit na ito?

  37.   Pagnakawan dijo

    At kung gusto kong pigilan ito?

  38.   Reg dijo

    Hello,
    Hindi ko alam kung ano ang ginagawa kong mali, ngunit sinusunod ko ang mga hakbang at walang naisakatuparan. Sinubukan ko:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * ugat / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * root usr / bin / test.sh

    at wala naman. Hindi ito nagpapatupad ng anumang bagay. Na-reboot ko at lahat.

  39.   Ferqos dijo

    Maraming salamat sa inyo