Lucaine 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. |
Indeks
Š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.
Š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!"
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:
48 komentara, ostavi svoj
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 modifikator je vrlo važan podatak i nešto vrlo korisno.
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.
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.
Pozdrav super korisne informacije da pojasnimo kako cron radi.
Bytes
za *
Izvrsno, hvala što ste pojasnili kako cron radi .. stavimo malo ruke 🙂
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
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!
Ne. Ako se dobro sjećam, za to morate staviti / 30 * * * * root Scrip.sh.
Odnosno dodajte / prije 30.
Živjeli! Paul.
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
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.
Zahvaljujemo na doprinosu.
10 bodova !!
hello2 !!
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.
čovječe hvala ti puno, čitao sam i testirao primjere. hvala vam puno ... vrlo je razumljivo. Živjeli
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.
Izvrsno, vrlo korisno !!!
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
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 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
Želim provjeriti povijest izmjena ovoga
kako to mogu
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).
A pozdrav.
Tako je. Hvala ti!
Zagrljaj! Paul
Želim znati kako stvoriti cron datoteku kako bih mogao odrediti vrijeme svakog izvršenja, 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, a zatim negdje drugdje.
Saludos
Hvala Sander! Zagrljaj! Paul.
dom = dan u mjesecu
dow = dan u sedmici
lakše je ako se udružiš
Puno vam hvala, ovo je vrlo kompletno i dobro objašnjeno.
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š.-.
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.-
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.
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
čini mi se da biste mogli koristiti 'echo' sve što želite dodati '| mačka >> 'staza kronotaba (/ etc / cronotab)' «
Kako bi se izraz prikazivao tačno svaka 3 dana
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?
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
Nisam znao da moram ponovo 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 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 ..
dobar dan!!
Kako mogu zaustaviti proces koji se izvršava u crontabu?
proces * …………
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
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 da učitam postavke ovog korisnika?
A ako želim da to zaustavim?
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.
mnogo vam hvala