Cron & crontab, razloženo

Lucaine objavljeno pred nekaj časa odlična vadnica o cron in crontab ki se mi zdi vredno deliti. Cron je nekakšen ekvivalent načrtovanim opravilom v sistemu Windows, samo da se z njim upravlja s terminala. Tisti, ki raje vizualni vmesnik doseže isti cilj, lahko to vidijo drug predmet.

Kaj je cron?

Ime cron izvira iz grškega chronos, kar pomeni "čas". V operacijskem sistemu Unix je cron običajen upravitelj procesov v ozadju (demon), ki v rednih intervalih izvaja procese ali skripte (na primer vsako minuto, dan, teden ali mesec). Procesi, ki jih je treba izvesti, in čas, ko jih je treba izvesti, so določeni v datoteki crontab.

Como dela

Demon cron se začne od /etc/rc.d/ o /etc/init.d odvisno od razporeditve. Cron deluje v ozadju, vsako minuto preveri tabelo nalog crontab / etc / crontab o en / var / spool / cron v iskanju nalog, ki jih je treba opraviti. Kot uporabnik lahko v cron dodamo ukaze ali skripte z nalogami za avtomatizacijo nekaterih procesov. To je na primer koristno za avtomatizacijo posodobitve sistema ali dobrega varnostnega sistema.

Povezani članek:
Vadnica: Namestite paketa .tar.gz in .tar.bz2

Kaj je zdravilo Crontab?

Crontab je preprosta besedilna datoteka, ki hrani seznam ukazov, ki jih je treba izvesti v času, ki ga določi uporabnik. Crontab bo preveril datum in uro, ko naj bo izveden skript ali ukaz, dovoljenja za izvajanje in bo to opravil v ozadju. Vsak uporabnik ima lahko svojo datoteko crontab, pravzaprav / etc / crontab domneva se, da je datoteka korenskega uporabnika crontab, ko pa običajni uporabniki (in celo root) želijo ustvariti lastno datoteko crontab, bomo uporabili ukaz crontab.

Crontab je najlažji način za upravljanje nalog cron v več uporabniških sistemih, bodisi kot preprost sistemski uporabnik ali korenski uporabnik.

Uporaba crontaba

Začnemo s preprostim primerom.

Avtomatizirali bomo posodobitev sistema in odpravili nadležno "Vedno moram posodabljati in mi to ni všeč!"

kako
Povezani članek:
Ukazi za poznavanje sistema (prepoznavanje konfiguracije strojne in nekatere programske opreme)

Najprej bomo naredili scenarij. Ta skript bo poklical cron in bo vseboval vsa navodila, ki jih želimo narediti, zato ga je treba preizkusiti v več primerih in na več načinov, preden ga vključite v cron, tako preprost skript za posodobitev, kot je ta:

#! / bin / bash # primer posodobitve skripta # izberite svojo distribucijo # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Odstranite # s svoje distribucijske črte. V primeru, da gre za Ubuntu / Debian, se začne z apt-get.

Skript shranimo kot update.sh (npr. Skripte shranite v vaš dom). Dovoljenja za izvajanje navedenega skripta spremenimo z:

chmod a + x ~ / scripts / update.sh

Skript izvedemo nekajkrat, da preverimo, ali vse deluje nemoteno, spremenimo, kar je potrebno (ne sme vsebovati napak, sicer bo cron napako ponavljal le znova in znova). Zdaj, da dodamo nalogo v naš crontab.

Dodajte naloge v crontab

Izvedbo crontaba zaženemo s crontab -e, v nekaterih distribucijah (kot je Ubuntu) pa imamo možnost, da izberemo urejevalnik besedil, ki ga želimo, ostalo nam ostane vi. Datoteka crontab bo videti nekako tako.

# mh uporabniški ukaz dom mon dow

kje:

  • m ustreza minuti, ko bo skript izveden, vrednost se giblje od 0 do 59
  • h natančen čas, se obravnava 24-urni format, vrednosti se gibljejo od 0 do 23, pri čemer je 0 12:00 polnoči.
  • darilo se nanaša na dan v mesecu, na primer lahko določite 15, če želite zagnati vsakih 15 dni
  • dow pomeni dan v tednu, lahko je številski (0 do 7, kjer sta 0 in 7 nedelja) ali prve 3 črke dneva v angleščini: pon, sreda, sreda, čet, pet, sobota, sonce.
  • uporabnik definira uporabnika, ki bo izvršil ukaz, lahko je root ali drug uporabnik, če ima dovoljenja za izvajanje skripta.
  • ukaz se nanaša na ukaz ali absolutno pot skripta, ki ga je treba izvesti, primer: /home/usuario/scripts/update.sh, če pokliče skript, mora biti izvedljiv

Da bi bili jasni, je pojasnjenih nekaj primerov nalog cron:

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

Vsak dan bo ob 10:15 zjutraj zagnal skript update.sh

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

Vsak dan bo ob 10:15 zagnal skript update.sh

00 10 * * 0 root apt-get -y posodobitev Root uporabnik

Posodobljeno bo vsako nedeljo ob 10:00

45 Posodobitev apt-get -y sončnega korena 10 * *

Root uporabnik bo objavil posodobitev vsako nedeljo (ne) ob 10:45

30 7 20 11 * uporabnik /home/usuario/scripts/updata.sh

20. novembra ob 7 bo uporabnik zagnal skript

30 7 11 11 uporabnik sonca /home/usuario/scripts/pastel_con_velitas.sh

11. novembra ob 7 in to je nedelja, bo uporabnik praznoval svojega sysadmina (torej mene)

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

Moteč opomnik vsako minuto vsake ure vsak dan (NE priporočljivo).

Z njimi je še vedno mogoče ravnati posebna območja:

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

Ob 5 popoldan vsak dan od ponedeljka do petka.

00 12 1,15,28 * *

Ob 12. uri vsak prvi, petnajsti in 28. v mesecu (idealno za plačilne liste)

Če je to zmedeno, ročaj crontab posebni nizi za opredelitev teh obsegov.

@reboot Zaženi enkrat, ob zagonu
@letno deluje samo enkrat na leto: 0 0 1 1 *
@ letno enako kot @ leto
@monthly teče enkrat mesečno, prvi dan: 0 0 1 * *
@weekly Weekly prva minuta prve ure v tednu. 0 0 * * 0 ″.
@daily vsak dan, ob 12:00 AM 0 0 * * *
@ polnoči enako kot @daily
@ urno v prvi minuti vsake ure: 0 * * * *

Njegova uporaba je zelo preprosta.

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

Nenazadnje:

Cron upravljanje delovnih mest

crontab

Zamenjajte obstoječo datoteko crontab z uporabniško določeno datoteko

crontab -e

Uredite uporabnikovo datoteko crontab, vsaka nova vrstica bo nova naloga crontab.

crontab -l

Naštejte vse uporabnikove naloge crontab

crontab -d

Izbrišite uporabnikov crontab

crontab -c r

Določa uporabnikov imenik crontab (ta mora imeti uporabnikova dovoljenja za pisanje in izvajanje)

uporabnik crontab -u

predpono za obdelavo crontaba drugega uporabnika, primeri:

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

To orodje, tako kot številna druga, je mogoče videti bolj poglobljeno in podrobneje v:

Hvala Lucain!

Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.

  1.   Slika nadomestnega znaka Alvara Ortiza je dejal

    Uf ... nekoliko zmedeno.

  2.   tonik je dejal

    * / 30 manjka (v polju minut), ki traja vsakih 30 minut ...

    1.    erm3nda je dejal

      Samo to sem hotel komentirati, dokler se nisem odločil pregledati komentarjev 😀
      Ta modifikator je zelo pomemben podatek in nekaj zelo koristnega.

      1.    Kika je dejal

        Pozdravljeni!
        Trenutno preizkušam konfiguracijo vsakih 45 minut.

        * / 45 * * * *, in navodilo se izvaja v 45 minutah na vsako uro IN vsako uro. Se pravi:

        Poteka ob 3:45, nato 4:00, 4:45, nato 5:00, 5:45, 6:00, 6:45 itd.

        Nekaj ​​imam narobe? Kaj lahko storim, da je to le vsakih 45 minut ali vsaj enkrat na 45 minut vsako uro.

    2.    Kika je dejal

      Pozdravljeni!
      Trenutno preizkušam konfiguracijo vsakih 45 minut.

      * / 45 * * * *, in navodilo se izvaja v 45 minutah na vsako uro IN vsako uro. Se pravi:

      Poteka ob 3:45, nato 4:00, 4:45, nato 5:00, 5:45, 6:00, 6:45 itd.

      Nekaj ​​imam narobe? Kaj lahko storim, da je to le vsakih 45 minut ali vsaj enkrat na 45 minut vsako uro.

  3.   Slack je dejal

    Pozdravljeni super koristne informacije za razjasnitev delovanja crona.
    Bytes

  4.   Slack je dejal

    za *

  5.   Hunter je dejal

    Odlično, hvala, da ste razjasnili, kako deluje cron .. dajmo malo roke 🙂

  6.   Jacob je dejal

    Kolikor razumem, bo ta vrstica izvedena ob 10, popravite me, če se motim
    No, tam piše 10:15
    15 22 * * * uporabnik /home/user/scripts/update.sh

  7.   Agustin je dejal

    Zdravo! zelo dobre informacije.
    Če želite skript izvajati vsake pol ure, bi bilo treba vrstico, ki jo želite dodati v CronTab: "30 * * * * root Scrip.sh" Pravilno? Najlepša hvala!

  8.   uporabimo linux je dejal

    Ne. Če se prav spomnim, morate za to postaviti / 30 * * * * root Scrip.sh.
    Se pravi, dodajte / pred 30.
    Na zdravje! Paul.

  9.   Jonathan je dejal

    Pozdravljeni, všeč mi je bil vaš prispevek, je zelo popoln, vendar sem vas želel nekaj vprašati.
    Imam težave s tem ukazom in takim, kot je "at".

    Želim zagnati skript ob določenem času in ga postaviti

    na primeru -f /home/mi_user/Desktop/script.sh 18:08

    in skript se ne izvaja na zaslonu, torej v terminalu, ali se izvaja v ozadju?

    In s cron se zgodi isto, kar je, uredim datoteko crontab z "crontab -e"

    na koncu dodam še to vrstico:

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

    in ne naredi ničesar, ne prikaže scenarija.

    Kakšen predlog? Najlepša hvala in se opravičujemo za morebitne nevšečnosti

    1.    uporabimo linux je dejal

      Za prikaz terminala boste morda morali zagnati terminal in predati skript kot parameter.

      Na primer:

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

      Parameter, ki ga želite uporabiti, se lahko razlikuje glede na uporabljeni terminalski emulator.

      Upam, da deluje.

      Objem! Paul.

  10.   patretke je dejal

    Prispevek je cenjen.

    10 točk !!

    pozdrav2 !!

  11.   Rodolfo je dejal

    Najlepša hvala, zelo mi je pomagalo razjasniti nekatere stvari, popolna hvala, za več podrobnosti ali vprašanja bom šel na STRAN ČLOVEK, ponovil pozdrav.

  12.   jahir je dejal

    človek najlepša hvala, bral sem in preizkušal primere. najlepša hvala ... je zelo razumljivo. Na zdravje

  13.   geovanni je dejal

    Za brisanje seznama uporabniških opravil sem uporabil ubuntu Server 12.04.2 LTS in uporabljeno različico crontab, ki jo imam, crontab -r (in -l, kot piše v tem priročniku). Seveda gre za vprašanje različic.

    Po drugi strani pa sem nekoč zagnal samo crontab in mi je to omogočil, da ustvarim svojo izvršilno datoteko, vendar se ta ni izvajala. Zažene se tista v / etc / crontab. morda bo kdo uporabil komentar.

    PS (iskal sem z locate in whereis crontab, vendar je vrnil zgoraj omenjeni naslov in drugo datoteko, ki je šifrirana, tako da če je bila izvršena tista v / etc / crontab, a pri izvrševanju ukaza crontab -e se je pojavil moj z vsemi opravili, ki sem jih definiral), kje je bila shranjena ta datoteka '???? S spoštovanjem. Vedno se prijavim s root.

  14.   Sebastian je dejal

    Odlično, zelo koristno !!!

  15.   mmm je dejal

    Pozdravljeni, rad bi to naredil ………… «15 10 * * * root ifdown eth0»

    to pomeni, da se ob določenem času omrežna kartica izklopi ………… no, dal sem jo v crontab in ni delovala ...... ..

    Saludos y gracias

  16.   Miguel je dejal

    Pogrešali ste definicijo "pon" za naslovom "Dodajanje opravil v crontab"

    Članek je še vedno lep, cron izjemno uporaben.

  17.   Oskar je dejal

    Kako kul je bila ta dobra objava, vprašajte me
    Kje ga lahko vidim, če želim slediti zapisom, ki jih je pustilo izvajanje nalog?

    je odločiti se, da želim videti zgodovino dejanj, izvedenih v preteklosti te datoteke, in videti, kdo jo je spremenil, ter datum

    hvala

  18.   Oscar je dejal

    Želim preveriti zgodovino sprememb tega

    kako lahko to storim

    hvala

  19.   Andres Ledo je dejal

    Dobro jutro,

    Mislim, da ste v skriptu ubuntu naredili napako, namesto nadgradnje apt-get -y ste postavili nadgradnjo ap-get -y. (Pustili ste t).

    Pozdrav.

    1.    uporabimo linux je dejal

      Tako je tudi. Hvala vam!
      Objem! Paul

  20.   Gabriel je dejal

    Želim vedeti, kako ustvariti datoteko cron, da lahko določim čas, ko se izvede, imenik itd.

  21.   Valentin je dejal

    Hvala, ker ste razjasnili delovanje in osnovne ukaze za cron, zdaj pa se malo zabavajte.

  22.   Sander je dejal

    Kadarkoli iščem informacije o kateri koli temi, povezani z Gnu / Linuxom, grem naokrog in v 90% primerov vedno najdem najboljšo vadnico v tej odlični skupnosti, mislim, da bom odslej začel tu in nato drugje.

    pozdrav

    1.    uporabimo linux je dejal

      Hvala Sander! Objem! Paul.

  23.   dario je dejal

    dom = dan v mesecu
    dow = dan v tednu
    lažje je, če se družiš

  24.   Pascual je dejal

    Najlepša hvala, zelo popolna in dobro razložena.

  25.   Zgornja čeljustnica je dejal

    To je ista stvar, ki nam jo je dal moj učitelj OS, ničesar ne spreminjam, zdaj vidim, zakaj je razred tako slab .-. No, to je enako kot domača naloga xD

  26.   Marcelo je dejal

    Spoštovani,

    Poizvedba, ali je lahko trajanje naloge omejeno?
    Na primer imam nalogo, ki se ponovi vsakih 5 minut, če je naloga še vedno aktivna, jo ubijte in zaženite znova.

    Hvala,
    Marcelo.-

    1.    uporabimo linux je dejal

      Pozdravljeni, Marcelo!

      Mislim, da bi bilo bolje, če bi to vprašanje postavili v naši klicni službi za vprašanja in odgovore Vprašajte DesdeLinux tako da vam lahko celotna skupnost pomaga pri težavi.

      Objem, Pablo.

  27.   aj je dejal

    dobra objava.
    Kakšen je ukaz na terminal, da dodate naloge v crontab (ne da bi vnesli crontab in jih ročno dodali s 'crontab -e' ali zamenjali crontab z drugim crontabom z 'crontab file').
    Ideja je ustvariti zunanji skript za dodajanje nalog v crontab
    hvala

    1.    david je dejal

      zdi se mi, da bi lahko uporabil 'echo', kar bi rad dodal '| mačka >> 'pot kronotaba (/ etc / cronotab)' «

  28.   Raphael Vera je dejal

    Kako bi izraz tekel natančno vsake 3 dni

  29.   José Antonio je dejal

    Hej.

    Imam težavo pri izvajanju posla cron.

    S cronta -e zaženem naslednjo nalogo:

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

    vendar naloga ni končana. Preveril sem, da ima myfile.sh dovoljenje za izvajanje in da je uporabnik, ki ga izvaja, root.

    Isto nalogo zaženem v / etc / crontab in po ponovnem zagonu storitve tudi pri meni ne deluje.
    Vsebina myfile.sh je ukaz, ki posodobi DB in če jo zaženem v konzoli, deluje.
    sploh veste, v čem je težava?

    1.    fredd je dejal

      Verjetno uporabnik baze podatkov nima vseh dovoljenj in boste najprej morali izvesti spremenljivke okolja iz mehanizma baze podatkov.
      Na primer v db2 bo ta vrstica šla na začetek skripta
      . / home / db2inst1 / sqllib / db2profile

      Drug vzrok bi lahko bil, da skript zahteva povezavo z bazo podatkov, povezavo z bazo podatkov pa izvedite v skriptu

  30.   LA3 je dejal

    Nisem vedel, da moram znova zagnati crond, že nekaj časa sem se boril s tem

  31.   kenia je dejal

    Vedeli bodo, kako se bo naloga izvajala vsak konec meseca ob navedenem času .. podrobnost je, da ne morem doseči, kako vem, da je zadnji dan vsakega meseca .. ??? Moral sem jih zapisovati enega za drugim, ko pa pride konec meseca februarja, da je biciesto, je zame zapleteno.

  32.   Jezus je dejal

    dober dan!!

    Kako ustavim postopek, ki se izvaja v crontabu?

  33.   Jezus je dejal

    postopek * …………

  34.   Julianna je dejal

    Ali mi lahko pomagaš? eu tenho um script avtor Minha, ki ne deluje noben crontab! jб dei vse pravice, noben zasebni cron ali uporabnik, ki bi ga lahko izvedel - skoraj nič se ne zgodi! Zanima me, če mi lahko pomagate, nekatere druge stvari ne delujejo! Vlws

  35.   Anthox je dejal

    Kako bi postavili nalogo, da se izvaja vsak zadnji dan v mesecu (dnevi: 31–30–28)?

  36.   tfercho je dejal

    Kot veste, se ukaz su uporablja za spreminjanje uporabnika v konzoli. Če uporabim ukaz su tako: "vaš uporabnik" spremeni uporabnika, vendar brez ustreznih nastavitev "uporabnik", če zaženem su kot: "su - uporabnik", spremenite uporabnika tako, da naložite uporabniške nastavitve. S cron označim uporabnika, kako pa naložim konfiguracije tega uporabnika?

  37.   Rob je dejal

    In če ga želim ustaviti?

  38.   regi je dejal

    Pozdravljeni,
    Ne vem, kaj delam narobe, vendar sledim korakom in nič se ne izvrši. Poskusil sem:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * root usr / bin / test.sh

    in prav nič. Ne izvrši ničesar. Ponovno sem zagnal in vse.

  39.   Ferqos je dejal

    najlepša hvala