Cron & crontab, klarigita

Lukain eldonita antaŭ kelka tempo bonega lernilo pri cron kaj crontab tion mi opinias inda dividi. Cron estas speco de ekvivalento al Planitaj Taskoj en Vindozo, nur ke ĝi estas pritraktita de la terminalo. Tiuj, kiuj preferas vidan interfacon por atingi la saman celon, povas vidi ĉi tion alia ero.

Kio estas cron?

La nomo cron venas de la greka chronos, kiu signifas "tempo". En la operaciumo Unikso, cron estas regula fona procezadministrilo (demono), kiu administras procezojn aŭ skriptojn laŭ regulaj intervaloj (ekzemple, ĉiun minuton, tagon, semajnon aŭ monaton). La procezoj, kiuj devas esti plenumitaj kaj la tempo, kiam ili devas esti ekzekutitaj, estas specifitaj en la crontab-dosiero.

Kiel ĝi funkcias

La cron-demono komenciĝas de /etc/rc.d/ o /etc/init.d depende de la distribuo. Cron kuras en la fono, ĉiuminute kontrolas la krontab-taskotabelon / etc / crontab aŭ en / var / spool / cron serĉante plenumotajn taskojn. Kiel uzanto ni povas aldoni komandojn aŭ skriptojn kun taskoj al cron por aŭtomatigi iujn procezojn. Ĉi tio utilas ekzemple por aŭtomatigi la ĝisdatigon de sistemo aŭ bona rezerva sistemo.

Rilata artikolo:
Lernilo: Instalu Pakojn .tar.gz kaj .tar.bz2

Kio estas Crontab?

Crontab estas simpla teksta dosiero, kiu stokas liston de ordonoj plenumotaj en tempo difinita de la uzanto. Crontab kontrolos la daton kaj tempon kiam la skripto aŭ komando devas esti plenumita, la ekzekutaj permesoj kaj ĝi faros ĝin en la fono. Ĉiu uzanto povas havi sian propran crontab-dosieron, fakte la / etc / crontab ĝi estas supozata kiel la krontab-dosiero de la radikuzanto, kiam normalaj uzantoj (kaj eĉ radiko) volas generi sian propran krontab-dosieron, tiam ni uzos la komandon crontab

Crontab estas la plej facila maniero administri cron-taskojn sur pluruzantaj sistemoj, ĉu kiel simpla sistemuzanto aŭ radikuzanto.

Uzante crontab

Ni komencas kun simpla ekzemplo.

Ni aŭtomatigos la ĝisdatigon de sistemo, por forigi la ĝenan "Mi ĉiam devas ĝisdatigi kaj mi ne ŝatas tion!"

kiel
Rilata artikolo:
Komandoj por koni la sistemon (identigi aparataron kaj iujn programajn agordojn)

Unue ni faros skripton. Ĉi tiu skripto estos vokita de cron kaj enhavos ĉiujn instrukciojn, kiujn ni volas, ke ĝi faru, tial necesas testi ĝin plurfoje kaj plurmaniere antaŭ ol inkluzivi ĝin en cron, simpla ĝisdatiga skripto kiel ĉi tiu:

#! / bin / bash #script update example # elekti vian distribuon # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Forigu la # de via distro-linio. Se temas pri Ubuntu / Debian, ĝi komenciĝas per apt-get.

Ni konservas la skripton kiel update.sh (ekz. Skripta dosierujo via hejmo). Ni ŝanĝas la ekzekutajn permesojn de la menciita skripto per:

chmod a + x ~ / scripts / update.sh

Ni plenumas la skripton kelkajn fojojn por kontroli, ke ĉio funkcias glate, ni modifas tion, kio necesas (ĝi ne devas enhavi erarojn, alie cron nur ripetos eraron ree). Nun aldonu la taskon al nia crontab.

Aldoni taskojn al crontab

Ni ekzekutas la eldonon de la crontab kun crontab -e, en iuj distribuoj (kiel Ubuntu) ĝi donas al ni la eblon elekti la tekstredaktilon, kiun ni volas, la reston ni restas kun vi. La crontab-dosiero aspektos tiel.

# mh dom mon dow uzanto komando

kie:

  • m egalas al la minuto, kiam la skripto estos plenumita, la valoro varias de 0 ĝis 59
  • h la ĝusta horo, la 24-hora formato estas pritraktita, la valoroj varias de 0 ĝis 23, kun 0 estante 12:00 noktomeze.
  • dom rilatas al la monatotago, ekzemple vi povas specifi 15 se vi volas kuri ĉiun 15 tagojn
  • dow signifas la semajnotagon, ĝi povas esti nombra (0 ĝis 7, kie 0 kaj 7 estas dimanĉo) aŭ la unuaj 3 literoj de la tago en la angla: mon, mar, wed, thu, fri, sat, sun.
  • surhavi difinas la uzanton, kiu plenumos la komandon, ĝi povas esti root aŭ alia uzanto kondiĉe ke ili havas permesojn ekzekuti la skripton.
  • komando rilatas al la komando aŭ la absoluta vojo de la plenumota skripto, ekzemple: /home/usuario/scripts/update.sh, se ĝi ja nomas skripton, ĝi devas esti plenumebla

Por esti klaraj kelkaj ekzemploj de cron-taskoj klarigitaj:

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

Ĝi lanĉos la skripton update.sh je 10:15 a.m. ĉiutage

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

Ĝi lanĉos la script update.sh je 10:15 ĉiutage

00 10 * * 0 radika apt-get -y ĝisdatigo Radika uzanto

Ĝi lanĉos ĝisdatigon ĉiun dimanĉon je 10:00 a.m.

45 10 * * sunradika apt-get -y ĝisdatigo

Radika uzanto lanĉos ĝisdatigon ĉiun dimanĉon (Suno) je 10:45 a.m.

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

La 20an de novembro je la 7:30 la uzanto funkciigos la skripton

30 7 11 11 sunuzanto /home/usuario/scripts/pastel_con_velitas.sh

La 11an de novembro je la 7a30 kaj dimanĉe, la uzanto festos sian administranton (tio estas, mi)

01 * * * * uzanto /home/user/scripts/molestorecordatorio.sh

Ĝena memorigilo ĉiun minuton de ĉiu horo ĉiutage (NE rekomendinda).

Ili ankoraŭ povas esti pritraktitaj specialaj gamoj:

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

Je la 5:30 posttagmeze ĉiutage de lundo ĝis vendredo.

00 12 1,15,28 **

Je la 12a tagmeze ĉiu unua, dekkvina kaj 28a de ĉiu monato (ideala por etato)

Se ĉi tio estas konfuza, krontab-teniloj specialaj ĉenoj por difini ĉi tiujn gamojn.

@ reboot Kuru unufoje, ĉe ekfunkciigo
@jare funkcias nur unufoje jare: 0 0 1 1 *
@jare same kiel @jare
@monate funkcias unufoje monate, la unua tago: 0 0 1 * *
@Welyly Weekly la unua minuto de la unua horo de la semajno. 0 0 * * 0 ″.
@ ĉiutage ĉiutage, je 12:00 a.m. 0 0 * * *
@midnight same kiel @ ĉiutage
@hore je la unua minuto de ĉiu horo: 0 * * * *

Ĝia uzo estas tre simpla.

@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @ ĉiutaga radiko apt-get update && apt-get -y upgrade

Laste sed ne malpli grave:

Cron-laborpostenado

crontab-dosiero

Anstataŭigu la ekzistantan crontab-dosieron per uzanto-difinita dosiero

crontab -e

Redaktu la dosieron de la uzanto, ĉiu nova linio estos nova tasko.

crontab -l

Enlistigu ĉiujn taskojn de la uzanto

crontab -d

Forigu la krontabulon de la uzanto

crontab -c dir

Difinas la dosierujon de la uzanto (ĉi tio devas havi la rajtojn de la uzanto skribi kaj plenumi)

crontab -u uzanto

prefikso por pritrakti krontabon de alia uzanto, ekzemploj:

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

Ĉi tiu ilo, kiel multaj aliaj, videblas pli profunde kaj pli detale en:

Dankon Lucain!

La enhavo de la artikolo aliĝas al niaj principoj de redakcia etiko. Por raporti eraron alklaku Ĉi tie.

48 komentoj, lasu la viajn

Lasu vian komenton

Via retpoŝta adreso ne estos eldonita.

*

*

  1. Respondeculo pri la datumoj: Miguel Ángel Gatón
  2. Celo de la datumoj: Kontrola SPAM, administrado de komentoj.
  3. Legitimado: Via konsento
  4. Komunikado de la datumoj: La datumoj ne estos komunikitaj al triaj krom per laŭleĝa devo.
  5. Stokado de datumoj: Datumbazo gastigita de Occentus Networks (EU)
  6. Rajtoj: Iam ajn vi povas limigi, retrovi kaj forigi viajn informojn.

  1.   Alvaro Ortiz lokokupilo bildo diris

    Uf ... iom konfuza.

  2.   tonika diris

    * / 30 mankas (en la kampo minutoj), kiu ruliĝas ĉiun 30 minutojn ...

    1.    erm3nda diris

      Ĝuste ĉi tion mi intencis komenti ĝis mi decidis revizii la komentojn 😀
      Ĉi tiu modifilo estas tre grava informo kaj io tre utila.

      1.    Kika diris

        Hola!
        Ĝuste nun mi provas agordon ĉiun 45 minutojn.

        * / 45 * * * *, kaj la instrukcio plenumiĝas je 45 minutoj de ĉiu horo KAJ ĉiu horo. Alivorte:

        Ĝi funkcias je 3:45, poste 4:00, 4:45, tiam 5:00, 5:45, 6:00, 6:45, ktp.

        Mi havas ion malĝustan? Kion mi povas fari por ke ĝi estu nur ĉiu 45 minutoj, aŭ almenaŭ unufoje po 45 minutoj ĉiu horo.

    2.    Kika diris

      Hola!
      Ĝuste nun mi provas agordon ĉiun 45 minutojn.

      * / 45 * * * *, kaj la instrukcio plenumiĝas je 45 minutoj de ĉiu horo KAJ ĉiu horo. Alivorte:

      Ĝi funkcias je 3:45, poste 4:00, 4:45, tiam 5:00, 5:45, 6:00, 6:45, ktp.

      Mi havas ion malĝustan? Kion mi povas fari por ke ĝi estu nur ĉiu 45 minutoj, aŭ almenaŭ unufoje po 45 minutoj ĉiu horo.

  3.   slack diris

    Saluton tre utila la informo por klarigi kiel cron funkcias.
    Bajtoj

  4.   slack diris

    por *

  5.   Ĉasisto diris

    Bonege, dankon por klarigi kiel cron funkcias. Ni metu iom da mano 🙂

  6.   Jacob diris

    Ĉi tiu linio, laŭ mia kompreno, estos plenumita je 10:15, korektu min se mi eraras
    Nu tie ĝi diras 10:15 a.m.
    15 22 * * * uzanto /home/user/scripts/update.sh

  7.   agustino diris

    Saluton! tre bona informo.
    Por plenumi Skripton ĉiun duonhoron, la linio aldonota al CronTab estus: "30 * * * * root Scrip.sh" Ĉu korekte? Multan dankon!

  8.   ni uzu linux diris

    Ne. Se mi bone memoras, vi devas meti / 30 * * * * root Scrip.sh.
    Tio estas, aldonu la / antaŭ 30.
    Saluton! Paŭlo.

  9.   Jonatan diris

    Saluton, mi ŝatis vian afiŝon, ĝi estas tre kompleta sed mi volis demandi al vi ion.
    Mi havas problemojn kun ĉi tiu komando kaj unu kiel "ĉe".

    Mi volas ekzekuti skripton en certa tempo kaj mi metas

    ĉe -f /home/mi_user/Desk/script.sh 18:08 ekzemplo

    kaj la skripto ne estas ekzekutita sur la ekrano, do en la fina stacio, ĉu ĝi estas ekzekutita en la fono?

    Kaj kun cron la samo okazas al mi, mi redaktas la crontab-dosieron per "crontab -e"

    fine mi aldonas ĉi tiun linion:

    46 19 mia_uzanto /hejme/mi_uzanto/Desk/script.sh

    kaj ĝi faras nenion, ĝi ne montras la skripton.

    Iu sugesto? Koran dankon kaj pardonpetu pro ia ĝeno

    1.    ni uzu linux diris

      Por ke la terminalo aperu, vi eble devos ruli la terminalon kaj pasigi la skripton kiel parametron.

      Ekzemple:

      lxterminal -e "mia_uzanto /hejme/mia_uzanto/Desk/script.sh"

      La parametro uzota povas varii laŭ la fina emulilo, kiun vi uzas.

      Mi esperas, ke ĝi funkcios.

      Brakumo! Paŭlo.

  10.   patrecas diris

    La kontribuo estas dankita.

    10 poentoj !!

    saluton2 !!

  11.   Rodolfo diris

    Koran dankon, ĝi multe helpis min klarigi iujn aferojn, tutajn dankojn, por pli da detaloj aŭ demandoj mi iros al la MAN-PAĜO, ripetis salutojn.

  12.   jahir diris

    Onklo tre dankas min, mi legis kaj testis la ekzemplojn. dankegon ... ĝi estas tre komprenebla. Saluton

  13.   geovanni diris

    Mi uzis ubuntu-servilon 12.04.2 LTS, kaj la versio de crontab, kiun mi havas, por forigi la liston de la laborpostenoj de la uzanto, estas uzata, crontab -r (kaj -l, kiel diras ĉi tiu manlibro). Certe temas pri versioj.

    Aliflanke, mi iam funkciigis nur crontab kaj ĉi tia permesis al mi krei mian propran ekzekutan dosieron, sed ĉi tiu ne estis tiu, kiu estis ekzekutita. Kiu ruliĝas estas tiu en / etc / crontab. eble iu uzos la komenton.

    PS (mi serĉis per lokalizado kaj kie estas krontab sed ĝi nur redonis la menciitan adreson kaj alian dosieron ĉifritan, do se tiu ekzekutita estis tiu en / etc / crontab, sed kiam plenumis la komandon crontab -e, mia aperis kun ĉiuj laboroj, kiujn mi difinis) kie estis konservita ĉi tiu dosiero '???? Salutojn. Mi ĉiam ensalutas per radiko.

  14.   sebastian diris

    Bonega, tre utila !!!

  15.   mmm diris

    Saluton, mi ŝatus fari ĉi tion ………… «15 10 * * * root ifdown eth0»

    tio signifas, ke en certa tempo la retkarto estas malŝaltita ... nu, mi metis ĝin en la kruntab kaj ĝi ne funkciis ... ... kio okazas?

    Saluton kaj dankon

  16.   Mikaelo diris

    Vi maltrafis difini "mon" post la titolo "Aldoni taskojn al crontab"

    La artikolo estas ankoraŭ bela, cron estas ege utila.

  17.   Oskaro diris

    Kiel mojosa estis tiu bona afiŝo, demandu min
    Se mi volas spuri la registrojn lasitajn de la plenumo de taskoj, kie mi povas vidi ĝin?

    estas decdir Mi volas vidi la historion de la agoj faritaj en la pasinteco de ĉi tiu dosiero kaj mi volas vidi kiu modifis ĝin kaj la daton

    gracias

  18.   oscar diris

    Mi volas kontroli la modifan historion de ĉi tio

    kiel mi povas fari ĝin

    gracias

  19.   Andreo Ledo diris

    Bona dias,

    Mi pensas, ke en la ubuntu-skripto vi faris eraron, vi metis ap-get -y upgrade anstataŭ apt-get -y upgrade. (Vi lasis t).

    Un saluto.

    1.    ni uzu linux diris

      Tiel estas. Dankon!
      Brakumo! Paŭlo

  20.   gabriel diris

    Mi volas scii kiel krei cron-dosieron por povi specifi la tempon kiam ĝi estas plenumita, la dosierujo ktp.

  21.   Valentin diris

    Dankon pro klarigi la operacion kaj la bazajn komandojn por cron, nun por distri vin iomete.

  22.   Sander diris

    Ĉiam, kiam mi serĉas informojn pri iu ajn temo rilate al Gnu / Linukso, mi rondiras por ĉiam trovi en 90% de la kazoj la plej bonan lernilon en ĉi tiu bonega komunumo, mi pensas, ke de nun mi komencos jen kaj jen aliloke.

    salutoj

    1.    ni uzu linux diris

      Dankon Sander! Brakumon! Paŭlo.

  23.   dario diris

    dom = tago de monato
    dow = tago de semajno
    estas pli facile se vi asocias

  24.   Pascual diris

    Koran dankon, tre kompletan kaj bone klarigitan.

  25.   Maksilia diris

    Ĉi tio estas la sama afero, kiun donis al ni mia OS-instruisto, mi ŝanĝas nenion, nun mi vidas kial la klaso estas tiel malbona.

  26.   Marcelo diris

    Taksita,

    Demando, ĉu la tempodaŭro de tasko povas esti limigita?
    Ekzemple mi havas taskon, kiu ripetas ĉiujn 5 minutojn, ripetante se tiu tasko ankoraŭ aktivas, mortigu ĝin kaj rulu denove.

    Dankon,
    Marcelo.-

    1.    ni uzu linux diris

      Saluton, Marcelo!

      Mi pensas, ke estus pli bone se vi starigus ĉi tiun demandon en nia nomita servo por demandoj kaj respondoj Demandu DeLinux por ke la tuta komunumo povu helpi vin pri via problemo.

      Brakumon, Pablo.

  27.   aj diris

    bona afiŝo.
    Kio estas la komando po fina stacio por aldoni taskojn al la crontab (sen eniri la crontab kaj aldoni ilin permane per 'crontab -e' aŭ anstataŭigi la crontab per alia crontab per 'crontab-dosiero').
    La ideo estas krei eksteran skripton por aldoni la taskojn al la crontab
    danke

    1.    david diris

      ŝajnas al mi, ke vi povus uzi 'eoon' kion ajn vi volas aldoni '| kato >> 'cronotab-vojo (/ etc / cronotab)' «

  28.   Rafaelo Vera diris

    Kiel esprimo funkcius ekzakte ĉiun 3 tagojn

  29.   Jose Antonio diris

    Saluton.

    Mi havas problemon plenumi cron-laboron.

    Mi plenumas la jenan taskon per cronta -e:

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

    sed la tasko ne plenumiĝis. Mi kontrolis, ke myfile.sh havas ekzekutan permeson kaj ke la uzanto, kiu plenumas ĝin, estas root.

    Mi plenumas la saman taskon en / etc / crontab kaj post rekomencado de la servo, ĝi ankaŭ ne funkcias por mi.
    La enhavo de myfile.sh estas komando, kiu ĝisdatigas DB kaj se mi funkciigas ĝin en la konzolo, ĝi funkcias.
    iu ideo, kia povas esti la problemo?

    1.    fredd diris

      La uzanto de datumbazo eble ne havas ĉiujn permesojn kaj vi unue devos eksporti la ĉirkaŭajn variablojn de via datumbaza motoro.
      Ekzemple en db2, ĉi tiu linio irus al la komenco de la skripto
      . / home / db2inst1 / sqllib / db2profile

      Alia kaŭzo povus esti, ke la skripto postulas konekton al la datumbazo, faru la ligon al la datumbazo ene de la skripto

  30.   LA3 diris

    Mi ne sciis, ke mi devas rekomenci la krondon, mi batalas kun ĉi tio dum kelka tempo

  31.   Kenjo diris

    Ili scios kiel indiki, ke la tasko funkcias ĉiun finon de la monato, en la horo indikita .. la detalo estas, ke mi ne povas atingi kiel mi scias, ke ĝi daŭras la lastan tagon de ĉiu monato .. ??? Mi devis noti ilin unu post la alia, sed kiam la fino de la monato februaro venas, ke ĝi estas biciesto, ĝi estas komplika ...

  32.   Jesuo diris

    bonan tagon!!

    Kiel mi haltigas la procezon, kiu estas ekzekutita en la crontab?

  33.   Jesuo diris

    procezo * …………

  34.   Julianna diris

    Ĉu eble vi povas helpi min? eu tenho um-skripto de minha verkita, kiu ne funkcias, ne krontab! Ĉu ĉiuj permesiloj, ne specifa cron aŭ uzanto kapablaj plenumi ĝin - plej nenio okazas! Mi ŝatus scii ĉu vi povas helpi min, iuj aliaj aferoj funkcias sen cron! Vlws

  35.   Anthox diris

    Kiel vi metus taskon funkcii ĉiun lastan tagon de la monato (tagoj: 31-30-28)?

  36.   tfercho diris

    Kiel vi scias, la su-komando estas uzata por ŝanĝi uzanton en konzolo. Se mi uzas la komandon su tiel: "via uzanto" ŝanĝas uzanton sed sen la taŭgaj agordoj de "uzanto", se mi uzas su kiel: "su - uzanto" ŝanĝu uzanton ŝarĝante la agordojn de uzanto. Kun cron mi indikas la uzanton, sed kiel mi ŝarĝas la agordojn de ĉi tiu uzanto?

  37.   Ŝteli diris

    Kaj se mi volas ĉesigi ĝin?

  38.   regi diris

    saluton,
    Mi ne scias, kion mi faras malbone, sed mi sekvas la paŝojn kaj nenio estas efektivigita. Mi provis:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * radiko usr / bin / test.sh

    kaj nenio entute. Ĝi nenion efektivigas. Mi rekomencis kaj ĉion.

  39.   Ferqos diris

    Dankegon