Cron & crontab, objašnjeno

Lucaine objavio maloprije izvrstan tutorial o cron-u i crontabu koje mislim da je vrijedno podijeliti. Cron je svojevrsni ekvivalent planiranim zadacima u sustavu Windows, samo da se njime rukuje s terminala. Oni koji vole vizualno sučelje da bi postigli isti cilj, mogu to vidjeti drugog članka.

Što je cron?

Naziv cron potječe od grčkog chronos što znači "vrijeme". U operacijskom sustavu Unix, cron je redoviti upravitelj pozadinskih procesa (demon) koji pokreće procese ili skripte u redovitim intervalima (na primjer, svake minute, dana, tjedna ili mjeseca). Procesi koji se moraju izvršiti i vrijeme u kojem se moraju izvršiti navedeni su u datoteci crontab.

Como radovi

Cron demon započinje od /etc/rc.d/ o /etc/init.d ovisno o raspodjeli. Cron radi u pozadini, provjerava tablicu zadataka crontab svake minute / etc / crontab ili u / var / spool / cron u potrazi za zadacima koje treba obaviti. Kao korisnik možemo dodati naredbe ili skripte sa zadacima u cron kako bismo automatizirali neke procese. Ovo je korisno, na primjer, za automatizaciju ažuriranja sustava ili dobrog sigurnosnog sustava.

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

Što 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, dopuštenja za izvršenje i to će učiniti u pozadini. Svaki korisnik može imati vlastitu 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 upotrijebiti naredbu crontab.

Crontab je najlakši način upravljanja cron zadacima na višekorisničkim sustavima, bilo kao jednostavan korisnik sustava ili kao root korisnik.

Korištenje crontaba

Počinjemo s jednostavnim primjerom.

Automatizirat ćemo ažuriranje sustava kako bismo uklonili dosadno "Uvijek se moram ažurirati i to mi se ne sviđa!"

kako
Povezani članak:
Naredbe za poznavanje sustava (prepoznavanje hardverskih i nekih softverskih konfiguracija)

Prije svega napravit ćemo scenarij. Ovu će se skriptu pozvati cron i sadržavat će sve upute koje želimo da učini, stoga ju je potrebno testirati 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 # s vaše distro linije. U slučaju da je Ubuntu / Debian, započinje s apt-get.

Skriptu spremamo kao update.sh (npr. Direktorij skripti u vaš dom). Dopuštenja za izvršavanje navedene skripte mijenjamo sa:

chmod a + x ~ / skripte / ažuriranje.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 s crontab -e, u nekim distro-ovima (poput Ubuntu-a) daje nam mogućnost da odaberemo uređivač teksta koji želimo, ostalo nam ostaje vi. Datoteka crontab izgledat će otprilike ovako.

# mh korisnička naredba dom mon dow

gdje je:

  • m odgovara minuti izvršenja skripte, vrijednost se kreće od 0 do 59
  • h točno vrijeme, obrađuje se 24-satni format, vrijednosti se kreću od 0 do 23, 0 je 12:00 ponoći.
  • dar odnosi se na dan u mjesecu, na primjer možete navesti 15 ako želite trčati svakih 15 dana
  • Dow znači dan u tjednu, 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 * * ažuriranje korijena sunca apt-get -y

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

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

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

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

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

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

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

Još uvijek se njima može rukovati posebni rasponi:

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

U 5:30 popodne svaki dan 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
@monthly radi jednom mjesečno, prvi dan: 0 0 1 * *
@weekly Weekly prva minuta prvog sata u tjednu. 0 0 * * 0 ″.
@daily svakodnevno, u 12:00 A.M. 0 0 * * *
@ponoć isto kao i @daily
@hourly u prvoj minuti svakog sata: 0 * * * *

Njegova je upotreba 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

Posljednje, ali ne najmanje važno:

Cron upravljanje poslom

crontab datoteku

Zamijenite postojeću datoteku crontab korisničkom datotekom

crontab -e

Uredite korisničku crontab datoteku, svaki novi redak bit će novi crontab zadatak.

crontab -l

Navedite sve korisnikove zadaće crontab

crontab -d

Izbrišite korisnikov crontab

crontab -c red

Definira korisnikov direktorij crontab (on mora imati korisnikova dopuštenja za pisanje i izvršavanje)

korisnik crontab -u

prefiks za obradu crontaba 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!

48 komentara, ostavi svoj

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  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 obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Slika rezerviranog mjesta Alvara Ortiza dijo

    Uf ... pomalo zbunjujuće.

  2.   tonik dijo

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

    1.    erm3nda dijo

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

      1.    Kika dijo

        Pozdrav!
        Trenutno testiram konfiguraciju svakih 45 minuta.

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

        Izvodi se u 3:45, pa 4:00, 4:45, pa 5:00, 5:45, 6:00, 6:45 i tako dalje.

        Nešto nisam u redu? Što mogu učiniti tako da bude samo svakih 45 minuta ili barem jednom u 45 minuta svaki sat.

    2.    Kika dijo

      Pozdrav!
      Trenutno testiram konfiguraciju svakih 45 minuta.

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

      Izvodi se u 3:45, pa 4:00, 4:45, pa 5:00, 5:45, 6:00, 6:45 i tako dalje.

      Nešto nisam u redu? Što mogu učiniti tako da bude samo svakih 45 minuta ili barem jednom u 45 minuta svaki sat.

  3.   Zatišje dijo

    Pozdrav super korisne informacije da pojasnimo kako cron radi.
    Bytes

  4.   Zatišje dijo

    za *

  5.   Lovac dijo

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

  6.   Jakov dijo

    Koliko sam razumio, ovaj će se redak izvršiti u 10:15, ispravite me ako griješim
    Pa tamo stoji 10:15
    15 22 * * * korisnik /home/user/scripts/update.sh

  7.   Agustin dijo

    Zdravo! jako dobre informacije.
    Da bi se skripta izvršavala svakih pola sata, redak koji bi se trebao dodati u CronTab bio bi: "30 * * * * root Scrip.sh" Je li tako? Puno ti hvala!

  8.   poslužimo se linuxom dijo

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

  9.   Jonathan dijo

    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/Desk/script.sh 18:08

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

    A sa cronom se dogodi isto što i meni, ja uređujem datoteku crontab s "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 ispričavamo se zbog neugodnosti

    1.    poslužimo se linuxom dijo

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

      Na primjer:

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

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

      Nadam se da će uspjeti.

      Zagrliti! Pavao.

  10.   patretke dijo

    Zahvaljujemo na doprinosu.

    10 bodova !!

    pozdrav2 !!

  11.   Rodolfo dijo

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

  12.   jahir dijo

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

  13.   Geovanni dijo

    Koristio sam ubuntu Server 12.04.2 LTS i koristi se verzija crontaba koju imam za brisanje popisa korisničkih poslova, crontab -r (i -l, kako kaže ovaj priručnik). Sigurno 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 netko upotrijebiti komentar.

    PS (Pretražujem s locate i whereis crontab, ali vratio je samo spomenutu adresu i drugu datoteku koja je šifrirana, pa ako je izvršena ona u / etc / crontab, ali kad sam izvršio naredbu crontab -e, moja se pojavila sa svim poslovima koje sam definirao) gdje se spremala ova datoteka '???? Pozdrav. Uvijek se prijavim s root-om.

  14.   Sebastian dijo

    Izvrsno, vrlo korisno !!!

  15.   mmm dijo

    Pozdrav, želio 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 …… .. što ima?

    Saludos y gracias

  16.   Miguel dijo

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

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

  17.   Oscar dijo

    Kako je cool bio taj dobar post, pitajte me
    Ako želim pratiti evidenciju ostavljenu 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 dijo

    Želim provjeriti povijest izmjena ovoga

    kako to mogu učiniti

    hvala

  19.   Andres Ledo dijo

    Dobro jutro,

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

    Pozdrav.

    1.    poslužimo se linuxom dijo

      Tako je. Hvala vam!
      Zagrliti! Pavao

  20.   Gabriel dijo

    Želim znati kako stvoriti cron datoteku kako bih mogao odrediti vrijeme svaki put kada se izvršava, direktorij itd.

  21.   Valentin dijo

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

  22.   Mašina za hoblovanje dijo

    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 i onda negdje drugdje.

    pozdravi

    1.    poslužimo se linuxom dijo

      Hvala Sander! Zagrljaj! Pavao.

  23.   dario dijo

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

  24.   Uskršnji dijo

    Puno vam hvala, vrlo cjelovito i dobro objašnjeno.

  25.   Maksilija dijo

    To je ista stvar koju nam je dao moj učitelj OS-a, ne mijenjam ništa, sad vidim zašto je razred tako loš .-. Pa, ovo je isto kao i domaća zadaća xD

  26.   Marcelo dijo

    Procijenjeno,

    Upit, može li se vrijeme trajanja zadatka ograničiti?
    Na primjer, imam zadatak koji se ponavlja svakih 5 minuta, na ponavljanju ako je taj zadatak još uvijek aktivan, ubijte ga i pokrenite ponovno.

    Hvala,
    Marcelo.-

    1.    poslužimo se linuxom dijo

      Pozdrav, Marcelo!

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

      Zagrljaj, Pablo.

  27.   aj dijo

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

    1.    David dijo

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

  28.   Raphael Vera dijo

    Kako bi se izraz točno prikazivao svaka 3 dana

  29.   José Antonio dijo

    Pozdrav.

    Imam problem s izvršavanjem cron posla.

    Izvodim sljedeći zadatak s 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 li je korisnik koji ga izvršava root.

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

    1.    fredd dijo

      Vjerojatno je da korisnik baze podataka nema sva dopuštenja i prvo ćete morati izvesti varijable okruženja iz vašeg mehanizma baze podataka.
      Na primjer, u db2 ovaj bi redak išao na početak skripte
      . / home / db2inst1 / sqllib / db2profile

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

  30.   LA3 dijo

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

  31.   Kenija dijo

    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 treba uzeti zadnji dan svakog mjeseca .. ??? Morao sam ih zapisivati ​​jednu po jednu, ali kad dođe kraj mjeseca veljače da je biciesto, to je komplicirano ...

  32.   Isus dijo

    dobar dan!!

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

  33.   Isus dijo

    postupak * …………

  34.   Julianna dijo

    Možete li mi pomoći? eu tenho um skripta autorice Minhe koja ne radi bez crontaba! 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 dijo

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

  36.   tferko dijo

    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 učitati postavke ovog korisnika?

  37.   Orobiti dijo

    A ako to želim zaustaviti?

  38.   regi dijo

    Pozdrav,
    Ne znam u čemu griješim, ali slijedim korake i ništa se ne izvršava. Pokušao 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. Ponovno sam pokrenuo i sve.

  39.   Ferqos dijo

    puno hvala