Cron & crontab, objašnjeno

Lucain javno prije malo vremena odličan vodič o cron-u i crontabu koje mislim da vrijedi podijeliti. Cron je vrsta ekvivalenta planiranim zadacima u sustavu Windows, samo da se njime rukuje s terminala. Oni koji više vole vizualno sučelje da bi postigli isti cilj, mogu to vidjeti druga stavka.

Šta je cron?

Ime cron dolazi od grčkog chronos što znači "vrijeme". U Unix operativnom sistemu, cron je redoviti upravitelj pozadinskih procesa (demon) koji pokreće procese ili skripte u redovnim intervalima (na primjer, svaki minut, dan, sedmica ili mjesec). Procesi koji se moraju izvršiti i vrijeme u kojem se moraju izvršiti navedeni su u datoteci crontab.

Kako to funkcioniše

Cron demon počinje od /etc/rc.d/ o /etc/init.d ovisno o distribuciji. Cron radi u pozadini, provjerava tablicu zadataka crontab svake minute / etc / crontab ili u / var / kalem / cron u potrazi za zadacima koje treba obaviti. Kao korisnik možemo dodati naredbe ili skripte sa zadacima u cron za automatizaciju nekih procesa. Ovo je korisno, na primjer, za automatizaciju ažuriranja sistema ili dobrog sigurnosnog sistema.

Vezani članak:
Vodič: Instalirajte .tar.gz i .tar.bz2 pakete

Šta je Crontab?

Crontab je jednostavna tekstualna datoteka koja pohranjuje popis naredbi koje treba izvršiti u vrijeme koje je odredio korisnik. Crontab će provjeriti datum i vrijeme kada treba izvršiti skriptu ili naredbu, dozvole za izvršenje i to će učiniti u pozadini. Svaki korisnik može imati svoju crontab datoteku, zapravo / etc / crontab pretpostavlja se da je datoteka root korisnika crontab, kada normalni korisnici (pa čak i root) žele generirati vlastitu datoteku crontab, tada ćemo koristiti naredbu crontab.

Crontab je najlakši način upravljanja cron zadacima na višekorisničkim sistemima, bilo kao jednostavni sistemski korisnik ili kao root korisnik.

Korišćenje crontab-a

Počinjemo sa jednostavnim primjerom.

Idemo automatizirati ažuriranje sistema, kako bismo uklonili dosadno "Uvijek moram ažurirati i ne sviđa mi se to!"

Vezani članak:
Naredbe za poznavanje sistema (prepoznavanje hardverskih i nekih softverskih konfiguracija)

Prije svega napravit ćemo skriptu. Ovu skriptu pozvat će cron i sadržavat će sve upute koje želimo da izvrši, stoga je potrebno testirati je u nekoliko slučajeva i na nekoliko načina prije nego što je uključite u cron, jednostavnu skriptu za ažuriranje poput ove:

#! / bin / bash # primjer ažuriranja skripte # odaberite distribuciju # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Uklonite # sa vaše distro linije. U slučaju da je Ubuntu / Debian, započinje s apt-get.

Skriptu čuvamo kao update.sh (npr. Direktorij skripti u vaš dom). Dozvole za izvršavanje navedene skripte mijenjamo sa:

chmod a + x ~ / scripts / update.sh

Izvršimo skriptu nekoliko puta kako bismo provjerili radi li sve glatko, modificiramo ono što je potrebno (ne smije sadržavati pogreške, inače će cron samo ponoviti grešku iznova i iznova). Sada da dodamo zadatak u naš crontab.

Dodajte zadatke u crontab

Izvedbu crontaba izvršavamo pomoću crontab -e, u nekim distro-ovima (poput Ubuntu-a) daje nam mogućnost da izaberemo uređivač teksta koji želimo, ostalo nam ostaje vi. Datoteka crontab izgledat će otprilike ovako.

# mh dom mon dow korisnička naredba

gde:

  • m odgovara minuti izvršenja skripte, vrijednost se kreće od 0 do 59
  • h tačno vrijeme, obrađuje se 24-satni format, vrijednosti se kreću od 0 do 23, a 0 je 12:00 ponoći.
  • dom odnosi se na dan u mjesecu, na primjer možete odrediti 15 ako želite da se pokrećete svakih 15 dana
  • dole označava dan u sedmici, može biti numerički (0 do 7, gdje su 0 i 7 nedjelja) ili prva 3 slova dana na engleskom: ponedjeljak, utorak, srijeda, čet, pet, sub, sunce.
  • korisnik definira korisnika koji će izvršiti naredbu, može biti root ili drugi korisnik sve dok imaju dozvole za izvršavanje skripte.
  • naredba odnosi se na naredbu ili apsolutni put skripte koja se izvršava, primjer: /home/usuario/scripts/update.sh, ako zove skriptu, mora biti izvršna

Da budemo jasni, objašnjeno je nekoliko primjera cron zadataka:

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

Pokretat će skriptu update.sh svaki dan u 10:15

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

Pokretat će skriptu update.sh svaki dan u 10:15

00 10 * * 0 root apt-get -y update Korijenski korisnik

Ažurirat će se svake nedjelje u 10:00 sati

45 10 * * sunce root apt-get -y ažuriranje

Root korisnik će pokretati ažuriranje svake nedjelje (ned) u 10:45

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

20. novembra u 7:30 korisnik će pokrenuti skriptu

30 7 11 11 korisnik sunca /home/usuario/scripts/pastel_con_velitas.sh

11. novembra u 7:30 i to je nedjelja, korisnik će proslaviti svog sysadmina (to jest, mene)

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

Dosadan podsjetnik svakog minuta svakog sata svakog dana (NE preporučuje se).

I dalje se njima može rukovati posebni rasponi:

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

U 5:30 popodne svakog dana od ponedjeljka do petka.

00 12 1,15,28 * *

U 12 sati svakog prvog, petnaestog i 28. u mjesecu (idealno za obračun plaća)

Ako je ovo zbunjujuće, crontab rukuje posebni nizovi za definiranje ovih raspona.

@reboot Pokreni jednom prilikom pokretanja
@yearly radi samo jednom godišnje: 0 0 1 1 *
@ godišnje isto kao i @godine
@mjesečno traje jednom mjesečno, prvi dan: 0 0 1 * *
@weekly Weekly prvi minut prvog sata u sedmici. 0 0 * * 0 ″.
@daily svakodnevno, u 12:00 A.M. 0 0 * * *
@midnight isto što i @daily
@hourly u prvoj minuti svakog sata: 0 * * * *

Njegova upotreba je vrlo jednostavna.

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

Zadnji ali ne i posljednji:

Cron upravljanje poslom

crontab datoteku

Zamijenite postojeću crontab datoteku s korisnički definiranom datotekom

crontab -e

Uredite korisnikovu crontab datoteku, svaki novi redak bit će novi crontab zadatak.

crontab -l

Navedite sve korisničke zadatke crontab

crontab -d

Izbrišite korisnikov crontab

crontab -c red

Definira korisnikov direktorij crontab (ovaj mora imati korisnikove dozvole za pisanje i izvršavanje)

crontab -u korisnik

prefiks za rukovanje crontabom drugog korisnika, primjeri:

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

Ovaj se alat, kao i mnogi drugi, može dublje i detaljnije vidjeti u:

Hvala Lucain!

Sadržaj članka pridržava se naših principa urednička etika. Da biste prijavili grešku, kliknite ovdje.

48 komentara, ostavi svoj

Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Slika rezerviranog mjesta Alvara Ortiza rekao je

    Uf ... pomalo zbunjujuće.

  2.   tonik rekao je

    * / 30 nedostaje (u polju minuta) koji traje svakih 30 minuta ...

    1.    erm3nda rekao je

      Upravo sam htio ovo komentirati dok nisam odlučio pregledati komentare 😀
      Ovaj modifikator je vrlo važan podatak i nešto vrlo korisno.

      1.    KIKA rekao je

        Hello!
        Trenutno testiram konfiguraciju svakih 45 minuta.

        * / 45 * * * *, a instrukcija se izvršava u 45 minuta svakog sata I svakog sata. To će reći:

        Radi u 3:45, zatim 4:00, 4:45, pa 5:00, 5:45, 6:00, 6:45 i tako dalje.

        Nešto nisam u redu? Šta mogu učiniti da to napravim samo svakih 45 minuta ili barem jednom u 45 minuta svakih sat vremena.

    2.    KIKA rekao je

      Hello!
      Trenutno testiram konfiguraciju svakih 45 minuta.

      * / 45 * * * *, a instrukcija se izvršava u 45 minuta svakog sata I svakog sata. To će reći:

      Radi u 3:45, zatim 4:00, 4:45, pa 5:00, 5:45, 6:00, 6:45 i tako dalje.

      Nešto nisam u redu? Šta mogu učiniti da to napravim samo svakih 45 minuta ili barem jednom u 45 minuta svakih sat vremena.

  3.   zatišje rekao je

    Pozdrav super korisne informacije da pojasnimo kako cron radi.
    Bytes

  4.   zatišje rekao je

    za *

  5.   Hunter rekao je

    Izvrsno, hvala što ste pojasnili kako cron radi .. stavimo malo ruke 🙂

  6.   Jacob rekao je

    Koliko sam shvatio, ova linija će se izvršiti u 10:15, ispravite me ako grešim
    Pa tamo stoji 10:15
    15 22 * * * korisnik /home/user/scripts/update.sh

  7.   Agustin rekao je

    Zdravo! vrlo dobre informacije.
    Da biste izvršavali skriptu svakih pola sata, redak koji treba dodati u CronTab bio bi: "30 * * * * root Scrip.sh" Tačno? Hvala ti puno!

  8.   iskoristimo linux rekao je

    Ne. Ako se dobro sjećam, za to morate staviti / 30 * * * * root Scrip.sh.
    Odnosno dodajte / prije 30.
    Živjeli! Paul.

  9.   Jonathan rekao je

    Pozdrav, svidio mi se vaš post, vrlo je potpun, ali htio sam vas nešto pitati.
    Imam problema s ovom naredbom i jednom poput "at".

    Želim pokrenuti skriptu u određeno vrijeme i staviti je

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

    a skripta se ne izvršava na ekranu, odnosno u terminalu, da li se izvršava u pozadini?

    A sa cron-om mi se isto događa, uređujem crontab datoteku sa "crontab -e"

    na kraju dodajem ovaj redak:

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

    i ne radi ništa, ne prikazuje skriptu.

    Ima li prijedloga? Puno vam hvala i izvinjavamo se zbog neugodnosti

    1.    iskoristimo linux rekao je

      Da bi se terminal pojavio, možda ćete morati pokrenuti terminal i proslijediti skriptu kao parametar.

      Na primjer:

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

      Parametar koji se koristi može se razlikovati ovisno o emulatoru terminala koji koristite.

      Nadam se da će uspjeti.

      Zagrljaj! Paul.

  10.   patretcas rekao je

    Zahvaljujemo na doprinosu.

    10 bodova !!

    salu2 !!

  11.   Rodolfo rekao je

    Puno vam hvala, puno mi je pomoglo da pojasnim neke stvari, potpuno hvala, za više detalja ili nedoumica otići ću na STRANICU ČOVJEKA, ponovio pozdrav.

  12.   jahir rekao je

    čovječe hvala ti puno, čitao sam i testirao primjere. hvala vam puno ... vrlo je razumljivo. Živjeli

  13.   Geovanni rekao je

    Koristio sam ubuntu Server 12.04.2 LTS i koristi se verzija crontab koju imam za brisanje liste korisničkih poslova, crontab -r (i -l, kako kaže ovaj priručnik). Svakako da je to pitanje verzija.

    S druge strane, jednom sam pokrenuo samo crontab i ovakva vrsta dozvolila mi je da kreiram vlastitu izvršnu datoteku, ali ovo nije ona koja se izvršava. Pokreće se onaj u / etc / crontab. možda će neko koristiti komentar.

    PS (pretraživao sam sa locate i whereis crontab, ali vratio je samo gore spomenutu adresu i drugu datoteku koja je šifrirana, pa ako je izvršena ona u / etc / crontab, ali prilikom izvršavanja naredbe crontab -e, moja bi pojaviti se sa svim poslovima koje sam definirao) gdje je bila pohranjena ova datoteka '???? Pozdrav. Uvijek se prijavim sa root-om.

  14.   Sebastian rekao je

    Izvrsno, vrlo korisno !!!

  15.   mmm rekao je

    Pozdrav, htio bih to učiniti ………… «15 10 * * * root ifdown eth0»

    to jest da je u određeno vrijeme mrežna kartica isključena ………… pa, stavio sam je u crontab i nije uspjela …… .. šta ima?

    Pozdrav i zahvalnost

  16.   Miguel rekao je

    Propustili ste definirati "pon" nakon naslova "Dodavanje zadataka u crontab"

    Članak je i dalje lijep, cron je izuzetno koristan.

  17.   OScar rekao je

    Kako je cool bio taj dobar post, pitajte me
    Ako želim da evidentiram zapise ostavljene izvršavanjem zadataka, gdje to mogu vidjeti?

    je odlučiti da želim vidjeti povijest radnji izvršenih u prošlosti ove datoteke i želim vidjeti tko ju je izmijenio i datum

    hvala

  18.   oscar rekao je

    Želim provjeriti povijest izmjena ovoga

    kako to mogu

    hvala

  19.   Andres Ledo rekao je

    Dobro jutro,

    Mislim da ste u skripti ubuntu pogriješili, stavili ste ap-get -y nadogradnju umjesto apt-get -y nadogradnje. (Ostavio si t).

    A pozdrav.

    1.    iskoristimo linux rekao je

      Tako je. Hvala ti!
      Zagrljaj! Paul

  20.   Gabriel rekao je

    Želim znati kako stvoriti cron datoteku kako bih mogao odrediti vrijeme svakog izvršenja, direktorij itd.

  21.   voljeni rekao je

    Hvala što ste pojasnili operaciju i osnovne naredbe za cron, a sada se malo zabavite.

  22.   Sander rekao je

    Kad god tražim informacije o bilo kojoj temi koja se odnosi na Gnu / Linux, obilazim da bih u 90% slučajeva uvijek pronašao najbolji vodič u ovoj velikoj zajednici, mislim da ću od sada početi ovdje, a zatim negdje drugdje.

    Saludos

    1.    iskoristimo linux rekao je

      Hvala Sander! Zagrljaj! Paul.

  23.   daryo rekao je

    dom = dan u mjesecu
    dow = dan u sedmici
    lakše je ako se udružiš

  24.   Pascual rekao je

    Puno vam hvala, ovo je vrlo kompletno i dobro objašnjeno.

  25.   Maxillia rekao je

    To je ista stvar koju nam je dao moj učitelj operativnih sistema, ne mijenjam ništa, sad vidim zašto je čas tako loš.-.

  26.   marcelo rekao je

    Procijenjeno,

    Upit, može li se vrijeme trajanja zadatka ograničiti?
    Na primjer, imam zadatak koji se ponavlja svakih 5 minuta, pri ponavljanju ako je taj zadatak još uvijek aktivan, neka ga ubije i pokrene ponovo.

    Hvala,
    Marcelo.-

    1.    iskoristimo linux rekao je

      Zdravo, Marcelo!

      Mislim da bi bilo bolje da ovo pitanje postavite u našoj službi za pitanja i odgovore Pitajte FromLinux tako da vam cijela zajednica može pomoći u rješavanju vašeg problema.

      Zagrljaj, Pablo.

  27.   aj rekao je

    dobar post.
    Koja je naredba po terminalu za dodavanje zadataka u crontab (bez unošenja crontaba i dodavanja ručno sa 'crontab -e' ili zamjene crontaba drugim crontabom sa 'crontab datotekom').
    Ideja je stvoriti vanjsku skriptu za dodavanje zadataka u crontab
    hvala

    1.    David rekao je

      čini mi se da biste mogli koristiti 'echo' sve što želite dodati '| mačka >> 'staza kronotaba (/ etc / cronotab)' «

  28.   Rafael Vera rekao je

    Kako bi se izraz prikazivao tačno svaka 3 dana

  29.   Jose Antonio rekao je

    Zdravo.

    Imam problem s izvršavanjem cron posla.

    Izvodim sljedeći zadatak sa cronta -e:

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

    ali zadatak nije gotov. Provjerio sam da myfile.sh ima odobrenje za izvršenje i da je korisnik koji ga izvršava root.

    Pokrećem isti zadatak u / etc / crontab, a nakon ponovnog pokretanja usluge ni meni to ne radi.
    Sadržaj myfile.sh je naredba koja ažurira DB i ako je pokrenem u konzoli, to funkcionira.
    bilo koja ideja u čemu je problem?

    1.    Fredd rekao je

      Korisnik baze podataka možda neće imati sve dozvole i prvo ćete morati izvesti varijable okruženja iz vašeg mehanizma baze podataka.
      Na primjer, u db2 ovaj bi red išao na početak skripte
      . / home / db2inst1 / sqllib / db2profile

      Drugi uzrok može biti taj da skripta zahtijeva vezu s bazom podataka, uspostavite vezu s bazom podataka unutar skripte

  30.   LA3 rekao je

    Nisam znao da moram ponovo pokrenuti crond, već sam se neko vrijeme borio s tim

  31.   Kenija rekao je

    Oni će znati kako naznačiti da se zadatak izvodi svakog kraja mjeseca, u naznačeno vrijeme .. detalj je da ne mogu postići kako znam da je potreban zadnji dan svakog mjeseca .. ??? Morao sam da ih zapisujem jednog po jednog, ali kad dođe kraj mjeseca februara da je biciesto, to mi je komplicirano ..

  32.   Isus rekao je

    dobar dan!!

    Kako mogu zaustaviti proces koji se izvršava u crontabu?

  33.   Isus rekao je

    proces * …………

  34.   Julianna rekao je

    Možete li mi pomoći? eu tenho um skripta autorice Minha koja ne radi no crontab! Jb daje sve dozvole, a ne određeni cron ili korisnik koji to može izvršiti - gotovo se ništa ne događa! Želio bih znati možete li mi pomoći, neke druge stvari ne rade bez problema! Vlws

  35.   Anthox rekao je

    Kako biste stavili zadatak da se izvodi svakog posljednjeg dana u mjesecu (dani: 31-30-28)?

  36.   tfercho rekao je

    Kao što već znate, naredba su koristi se za promjenu korisnika u konzoli. Ako koristim naredbu su ovako: "tvoj korisnik" promijeni korisnika, ali bez odgovarajućih postavki "user", ako pokrenem su kao: "su - user" promijeni korisnika učitavanjem korisničkih postavki. Pomoću cron označavam korisnika, ali kako da učitam postavke ovog korisnika?

  37.   opljačkati rekao je

    A ako želim da to zaustavim?

  38.   Regi rekao je

    zdravo,
    Ne znam u čemu griješim, ali slijedim korake i ništa se ne izvršava. Pokušavao sam:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * root usr / bin / test.sh

    i baš ništa. Ne izvršava ništa. Pokrenuo sam sistem i sve.

  39.   Ferqos rekao je

    mnogo vam hvala