![]() |
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.
Š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!"
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:
Uf ... pomalo zbunjujuće.
* / 30 nedostaje (u polju minuta) koji traje svakih 30 minuta ...
Upravo sam htio ovo komentirati dok nisam odlučio pregledati komentare 😀
Ovaj je modifikator vrlo važan podatak i nešto vrlo korisno.
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.
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.
Pozdrav super korisne informacije da pojasnimo kako cron radi.
Bytes
za *
Izvrsno, hvala što ste pojasnili kako cron radi .. stavimo malo ruke 🙂
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
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!
Ne. Ako se dobro sjećam, za to morate staviti / 30 * * * * root Scrip.sh.
Odnosno dodajte / prije 30.
Živjeli! Pavao.
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
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.
Zahvaljujemo na doprinosu.
10 bodova !!
pozdrav2 !!
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.
čovječe hvala ti puno, čitao sam i testirao primjere. puno hvala ... vrlo je razumljivo. Živjeli
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.
Izvrsno, vrlo korisno !!!
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
Propustili ste definirati "pon" nakon naslova "Dodavanje zadataka u crontab"
Članak je i dalje lijep, cron je izuzetno koristan.
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
Želim provjeriti povijest izmjena ovoga
kako to mogu učiniti
hvala
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.
Tako je. Hvala vam!
Zagrliti! Pavao
Želim znati kako stvoriti cron datoteku kako bih mogao odrediti vrijeme svaki put kada se izvršava, direktorij itd.
Hvala što ste pojasnili operaciju i osnovne naredbe za cron, a sada se malo zabavite.
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
Hvala Sander! Zagrljaj! Pavao.
dom = dan u mjesecu
dow = dan u tjednu
lakše je ako se udružiš
Puno vam hvala, vrlo cjelovito i dobro objašnjeno.
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
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.-
Pozdrav, 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.
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
čini mi se da biste mogli upotrijebiti 'echo' što god želite dodati '| mačka >> 'put kronotaba (/ etc / cronotab)' «
Kako bi se izraz točno prikazivao svaka 3 dana
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?
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
Nisam znao da moram ponovno pokrenuti crond, već sam se neko vrijeme borio s tim
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 ...
dobar dan!!
Kako mogu zaustaviti postupak koji se izvršava u crontabu?
postupak * …………
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
Kako biste stavili zadatak da se izvodi svakog posljednjeg dana u mjesecu (dani: 31-30-28)?
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?
A ako to želim zaustaviti?
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.
puno hvala