Istražimo svet crontab-a, njegove komande i različite operacije koje su s njim povezane.
Naučićemo kako da zakažemo izvršavanje zadataka pomoću crontab uslužnog programa, a na kraju ćemo se upoznati i sa nekim online alatima koji nam mogu pomoći pri formatiranju i testiranju crontab komandi.
Poreklo
Crontab je skraćenica od „cron table“ (cron tabela). Reč cron potiče od grčke reči Chronos, što znači vreme. Crontab je sistemski demonski proces koji automatski izvršava određene zadatke i poslove prema definisanom rasporedu.
Slučajevi upotrebe
Crontab je koristan za obavljanje raznih operacija, kao što su automatizovano pravljenje rezervnih kopija, rotiranje log fajlova, sinhronizacija fajlova između udaljenih računara i brisanje privremenih direktorijuma. Crontab se može primeniti za bilo koju vrstu posla, ali postaje posebno značajan u sistem administraciji.
Korišćenjem cron-a, administrator može da zakaže pokretanje posla u određeno vreme i dan.
Hajde da vidimo kako to možemo podesiti.
Crontab sintaksa
Da bi izvršio listu komandi, cron uslužni program čita konfiguracione fajlove. Za tumačenje linija u crontab konfiguracionim tabelama, koristi se sledeća crontab sintaksa. Crontab ima šest polja, pri čemu prvih pet (1-5) polja definišu datum i vreme izvršenja. Poslednje, šesto polje, može biti korisničko ime i/ili zadatak/posao/komanda/skripta koja treba da se izvrši.
* * * * * KOMANDA KORISNIČKO_IME/SKRIPTA-ZA-IZVRŠAVANJE
│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_________ Dan u nedelji (0 – 6) (0 je nedelja, ili koristite imena)
│ │ │ |____________ Mesec (1 – 12), * označava svaki mesec
│ │ |______________ Dan u mesecu (1 – 31), * označava svaki dan
│ |________________ Sat (0 – 23), * označava svaki sat
|____________________ Minut (0 – 59), * označava svaki minut
Napomene:
- Asterisk (*)
- se koristi za uparivanje svih mogućih vrednosti za dato polje. Na primer, zvezdica u polju sata bi značila svaki sat, a zvezdica u polju meseca bi značila svaki mesec.
Korisničko ime je opcionalno (dostupno samo ako se radi o sistemskom crontab fajlu)
Primeri:
Hajde da razjasnimo gornju sintaksu kroz nekoliko primera.
0 5 * * * /skripte/job.sh
1. Zakazuje izvršavanje cron zadatka u 5 ujutru svakog dana.
0 6,18 * * * /skripte/job.sh
2. Zakazuje izvršavanje cron zadatka dva puta dnevno, u 6 ujutru i u 18 popodne.
* * * * * /skripte/job.sh
3. Zakazuje izvršavanje cron zadatka svakog minuta.
0 19 * * pon /skripte/job.sh
4. Zakazuje izvršavanje cron zadatka svakog ponedeljka u 19 časova.
*/10 * * * * /skripte/job.sh
5. Zakazuje izvršavanje cron zadatka svakih 10 minuta.
* * * feb,jun,okt * /skripte/job.sh
6. Zakazuje izvršavanje cron zadatka u odabranim mesecima (februar, jun, oktobar).
25 7 4 3 * /home/skripte/backup.sh
7. Pokreće shell skriptu /home/skripte/backup.sh 4. marta u 7:25.
8. Zakazuje izvršavanje cron zadatka svakih 30 sekundi
- S obzirom da nemamo direktnu kontrolu nad sekundama u crontab-u, možemo ovo postići u dva koraka:
* * * * * /home/skripte/script.sh
- Prvo, zakažimo zadatak koji se izvršava svakog minuta.
* * * * * sleep 30; /home/skripte/script.sh
Sada koristimo komandu „sleep“ da pauziramo izvršenje na 30 sekundi.
Gornji zadatak će pauzirati izvršenje na 30 sekundi, a zatim će se ponovo nastaviti.
Tipovi crontab konfiguracionih fajlova
Postoje dve vrste crontab konfiguracionih fajlova:
UNIX/Linux sistemski crontab
Ovo zahteva root privilegije jer se obično koristi za sistemske usluge i kritične poslove. Šesto polje (u gornjem opisu sintakse) je ime korisnika pod kojim će se komanda izvršiti. To omogućava sistemskom crontab-u da pokreće komande u ime bilo kog korisnika.
Korisnički crontab
Korisnik takođe može da instalira sopstvene cron poslove koristeći naredbu „crontab“. U ovom slučaju, šesto polje (u gornjem opisu sintakse) je komanda za pokretanje, a sve komande se izvršavaju kao korisnik koji je kreirao crontab. Svaki korisnik može imati sopstveni crontab fajl, i iako se oni nalaze u /var/spool/cron/crontabs, nisu namenjeni za direktno uređivanje. Moramo koristiti komandu „crontab“ za uređivanje ili podešavanje sopstvenih cron poslova.
Kako ovo funkcioniše? Cron servis (demon) radi u pozadini i konstantno proverava (svakog minuta) fajl /etc/crontab i /etc/cron.*/ direktorijume. Takođe proverava i direktorijum /var/spool/cron/. Komande izvršava cron
kada se polja za minut, sat i mesec podudaraju sa trenutnim vremenom, i kada barem jedno od polja za dan (dan u mesecu ili dan u nedelji) odgovara trenutnom danu.
Osnovne komande
Navođenje postojećih cron poslova
crontab -l
Sve cron poslove možemo da navedemo bez otvaranja konfiguracionog fajla, korišćenjem sledeće komande:
[[email protected] ~]# crontab -l no crontab for techblog.co.rs [[email protected] ~]#
Ako ne postoji nijedan postojeći posao, vratiće se izlaz:
[[email protected] ~]# crontab -l # Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command 0 */1 * * * /home/account/scripts/updateAccountStatuses.sh 0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh [[email protected] ~]#
Ako je korisnik već dodao neke od poslova, oni će se prikazati na ovaj način.
Crontab je specifičan za korisnika, što znači da morate biti prijavljeni kao određeni korisnik da biste videli listu njegovih crontab-ova.
Lista cron poslova za određenog korisnika
Da biste naveli zakazane poslove drugog korisnika, koristite opciju -u (korisnik) i -l (lista).
crontab -u drugo_korisničko_ime -l
Primer: crontab -u vdzvdz -l
Dodavanje/izmena crontab unosa
Da bismo uredili crontab unos, možemo koristiti opciju -e, kao što je prikazano ispod:
crontab -e
Gornja komanda će otvoriti vi editor u kojem možete navesti detalje posla i sačuvati fajl. Nakon čuvanja, možete proveriti da li je cron konfigurisan pomoću komande „crontab -l“.
Dodavanje/izmena crontab unosa za određenog korisnika
crontab -u drugo_korisničko_ime -e
Crontab za drugog korisnika možemo uređivati pomoću sledeće naredbe:
Primer: crontab -u vdzvdz -e
Uklanjanje crontab unosa
Koristite parametar -r sa crontab-om da uklonite sve zakazane poslove iz crontab-a bez potvrde:
crontab -r
crontab -i -r
[[email protected] ~]# crontab -i -r crontab: really delete techblog.co.rs's crontab?
Ako želite potvrdu pre brisanja zakazanih poslova, koristite opciju -i sa -r, koja će zatražiti potvrdu od korisnika pre brisanja korisnikovog crontab-a.
Crontab specijalni stringovi
Osim gore navedene sintakse, možemo koristiti i osam specijalnih stringova koje nudi crontab. Oni ne samo da štede vreme, već poboljšavaju i čitljivost.
Specijalni string
Opis
@restart
Izvršava se jednom, nakon pokretanja sistema.
@yearly
Izvršava se jednom godišnje, tj. 0 0 1 1 *
@annually
Isto kao @yearly
@monthly
Izvršava se jednom mesečno, tj. 0 0 1 * *
@weekly
Izvršava se jednom nedeljno, tj. 0 0 * * 0
@daily
Izvršava se jednom dnevno, tj. 0 0 * * *
@midnight
Isto kao @daily
@hourly
Izvršava se jednom na sat, tj. 0 * * * *
Crontab primeri specijalnih stringova
1. Crontab za zakazivanje zadataka na godišnjem nivou
@yearly /skripte/pozdrav.sh
Gore navedeno se može koristiti, na primer, za slanje novogodišnje čestitke i izvršavaće se u prvom minutu svake godine.
2. Crontab za zakazivanje zadataka koji se izvršavaju mesečno.
@monthly /skripte/čišćenje.sh
Ovo se može koristiti za obavljanje aktivnosti čišćenja na početku svakog meseca.
Slično tome, možemo koristiti druge specijalne stringove crontab-a za nedeljne, dnevne i satne potrebe.
Cron direktorijumi
- Administrator sistema može koristiti raspored cron za ceo sistem koji dolazi u predefinisanim cron direktorijumima kao što su:
- /etc/cron.d
- /etc/cron.daily
- /etc/cron.hourly
- /etc/cron.monthly
/etc/cron.weekly
Crontab primeri u realnom vremenu
Razmotrimo neke od primera iz realnog sveta koje obično koriste sistemski administratori ili IT profesionalci.
Brisanje praznih fajlova i direktorijuma
45 0 * * * vdzvdz find /tmp -type f -empty -delete
Gornji cron izraz će pronaći prazne fajlove i direktorijume unutar /tmp direktorijuma i obrisati ih. Ovaj posao će se obavljati svakodnevno u 00:45. Potrebno je navesti korisničko ime pod kojim će se ovaj posao izvršavati. U gornjem primeru, korisnik „vdzvdz“ izvodi operaciju cron posla.
Izvršavanje više zadataka pomoću jednog cron-a
* * * * * /home/skripte/backup.sh; /home/skripte/skripta.sh
Više zadataka/poslova može se odvojiti pomoću tačke i zareza (;) i može se dodeliti jednom cron izrazu.
Alati za crontab formatiranje i testiranje
Do sada smo razgovarali o komandama i sintaksi crontab-a za zakazivanje zadataka. Ali, šta ako niste sistemski administrator i vaš posao nije redovno podešavanje cron poslova? Možda neće biti moguće zapamtiti sintaksu, što otvara mogućnost grešaka. Ne brinite, imamo rešenje za ovaj problem.
Postoji nekoliko online alata za formatiranje cron izraza.
# 1. Cron Job Generator Cron Job Generator
je vrlo jednostavan grafički interfejs gde možete definisati minute, dane i putanju skripte za generisanje crontab izraza.
Uzmimo primer iz realnog sveta, gde je potrebno izvršiti /home/processMonitor.sh svakih 5 minuta, od ponedeljka do petka.
Dobijamo sledeću cron sintaksu koju možemo staviti u naš crontab izvršavanjem:
crontab -e
0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh
# 2. Easycron Easycron
je koristan web-baziran planer cron poslova. Možemo kreirati cron posao tako što ćemo navesti URL za pozivanje i podesiti vreme njegovog izvršavanja. Takođe, možemo navesti cron izraz ili ga dodati ručno iz opisnog oblika. Važno je da opciono možemo koristiti osnovnu HTTP autentifikaciju za mali nivo sigurnosti.
Pored toga, Easycron se može koristiti i za postizanje drugih ciljeva, kao što su standardni cron izrazi, evidencija izvršavanja cron zadataka, obaveštenja putem e-pošte, odvojene evidencije grešaka itd.
# 3. Crontab Generator Crontab Generator
je još jedan zgodan alat za generisanje crontab-a. Pomoću ovog alata možete dodati i opcije za čuvanje izlaza cron posla u datoteku ili slanje putem e-pošte.
# 4. Crontab Guru Crontab Guru
je jednostavan online editor za kreiranje cron rasporeda. Pored toga, nudi koristan alat za praćenje vaših cron poslova. Sve što treba da uradimo je da kopiramo datu komandu i dodamo je na kraj definicije cron-a. U slučaju da cron posao ne uspe ili se čak ne pokrene, dobićete e-poruku sa upozorenjem.
U primeru ispod, posao će se izvršavati u 04:05, svakog dana, svakog meseca i svake nedelje.
# 5. CRON Tester CRON Tester
omogućava nam da testiramo cron definicije vremena/datuma. Može doći do situacije u kojoj je potrebno dekodirati postojeću cron sintaksu radi rešavanja problema ili samo radi testiranja.
Za to možemo koristiti ovaj alat. Sve što treba da uradimo je da kopiramo i nalepimo naš cron izraz u polje za definiciju cron-a, izaberemo broj iteracija i kliknemo na Test da vidimo različite datume kada će se posao pokrenuti.
Proverimo jedan od naših cron izraza: 4 3 */2 * *, koji bi trebalo da se pokreće u 03:04 (am) svakog drugog dana. Hajde da to proverimo sa cron testerom.
.