Isprobajte incron (inode cron)
Cron je sastavni dio raznih Unix sustava od samih njegovih početaka. Drugi operativni sustavi također imaju slične sustave periodičkog izvršavanja naredbi, samo s drugim imenom (primjerice, "event scheduler"). No, nitko nema ugrađeni scheduler koji reagira na određene događaje. Incron je upravo to, a reagira na promjene u definiranim direktorijima, ili nad definiranim datotekama. Promjene uključuju modificiranje datoteke, promjene vlasništva i atributa, te brisanje i kreiranje.
Iako postoje programi koji upravo ovakve stvari rade na Windowsima, na Linuxu se teže nalaze. Incron je jedan od takvih programa s kojim smo odlučili automatizirati dio naših potreba. Naziv incron dolazi od "inotify cron". Inotify je, s druge strane, mehanizam, odnosno API linuxovog kernela koji obavještava o promjenama na datotečnom sustavu. Više o njemu na adresi: https://en.wikipedia.org/wiki/Inotify .
Instalacija je identična kao i kod ostalih paketa, samo treba napraviti "apt-get install":
# apt-get install incron
The following NEW packages will be installed:
incron
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 104 kB of archives.
...
Setting up incron (0.5.10-1) ...
Adding group `incron' (GID 142) ...
Starting File system events scheduler: incron.
Ovime je incron instaliran i pokrenut. Idemo dalje.
Incron slijedi imenovanje crontaba. Kako cron ima crontab, tako incron ima incrontab. Slično je i sa opcijama, pa će opcija "-l" izlistati postojeće incron jobove, a slično je i s drugim opcijama. Naravno, manual je dostupan, tamo su objašnjenje sve mogućnosti. Nekolicinu ćemo obraditi u članku.
Incron ima postavke sigurnosti koje "po defaultu" onemogućuju ikome da koristi incron. Problem je jednostavno rješiv s naredbom "rm /etc/incron.allow /etc/incron.deny", a o finijim podjelama ćemo nešto kasnije.
Novi incron job ćemo kreirati sa:
$ incrontab -e
Sintaksa je ipak pomalo drugačija nego kod crona, što se moglo očekivati. Sintaksa nije obrađena u glavnoj man stranici, nego u sekciji 5, znači da ćete informacije o sintaksi dobiti naredbom "man 5 incrontab".
Sintaksa je sljedeća:
<putanja> <maska> <naredba>
<putanja> Ovo je naravno putanja do direktorija odnosno datoteke
<maska> Ovdje dolazi jedna od sljedećih opcija, odnosno događaja:
IN_OPEN | Datoteka je bila otvorena |
IN_CLOSE_WRITE | Datoteka otvorena za pisanje je bila zatvorena |
IN_CLOSE_NOWRITE | Neotvorena datoteka (za pisanje) je bila zatvorena |
IN_CLOSE | Kombinacija IN_CLOSE_WRITE i IN_CLOSE_NOWRITE |
IN_ACCESS | Datoteci je pristupljeno |
IN_ATTRIB | Metapodaci su promijenjeni (permisije, oznaka vremena, prošireni atributi... |
IN_CREATE | Datoteka ili direktorij je bio kreiran |
IN_DELETE | Datoteka ili direktorij je bio obrisan |
IN_DELETE_SELF | Promatrana datoteka ili dir je obrisan |
IN_MODIFY | Promatrana datoteka je bila modficirana |
IN_MOVE_SELF | Promatrana datoteka ili direktorij je bio pomaknut (move) |
IN_MOVED_FROM | Datoteka je bila maknuta iz promatranog direktroija |
IN_MOVED_TO | Datoteka je bila pomaknuta u promatrani direktorij |
IN_MOVE | Kombinacija IN_MOVED_TO i IN_MOVED_FROM |
IN_ALL_EVENTS | Bit-maska svih događaja |
Kada pratimo događaje u direktoriju, događaji se prate za sve datoteke u tom direktoriju. Kako ćemo onda znati koja se datoteka promijenila? Jednostavno, ime datoteke će se pojaviti u polju "name".
U manualu su spomenuti i dodatni simboli u maski:
IN_DONT_FOLLOW | Ne razrješuj stazu ako je simbolički link (razrješiti = dereferencirati) |
IN_ONESHOT | Prati stazu, ali "okini" samo jedanput |
IN_ONLYDIR | Prati samo ako je riječ o direktoriju |
IN_NO_LOOP | Poseban simbol, onemogućava praćenje dok ne završi proces praćenja koji trenutno traje |
Staza (ili putanja, path) je puno ime datoteke ili direktorija, sve je to za Unix/Linux isto, riječ je samo o drugačijem unosu u odgovarajući inode-u.
Incron prati događaje unutar direktorija, ali ne i u poddirektorijima, pa na to obratite pažnju.
Objasnili smo što je to "putanja", "maska", a ostaje nam još objasniti "naredbu". <naredba> je naredba koja se treba izvršiti kada se neki događaj ostvari.
Ovdje se mogu koristiti određeni zamjenski znakovi (wildcards):
$$ dolarski znak
$@ staza koja se prati na dat. sustavu
$# naziv datoteke koja je "okinula" događaj
$% zastavice događaja (tekstualno)
$& zastavice događaja (numerički)
Doslovce, ovi znakovi su varijable koje se popunjavaju određenim vrijednostima koje možete dalje koristiti u svojim skriptama. Vrijeme je za primjer.
Napravimo direktorij koji ćemo pratiti i otvorimo incrontab:
# mkdir /testni/direktorij
# incrontab -e
U datoteku upišimo sljedeći testni redak:
/testni/direktorij/ IN_CREATE echo "$$ $@ $# $% $&"
Pazite na sintaksu pisanja direktorija, obavezno ide "/" nakraju!
Napravimo novu datoteku, može i jednostavan "touch":
# touch /testni/direktorij/test.txt
U syslogu ćemo moći vidjeti unose poput ovoga:
Aug 30 14:38:57 server incrond[18604]: (korisnik) CMD ( echo "$ /testni/direktorij/ test.txt IN_CREATE 256")
Aug 30 14:38:57 server incrond[6515]: cannot exec process: No such file or directory
Čini se da radi, ali kakva je ovo greška na kraju? Čini se da je incrontab izuzetno osjetljiv na sintaksu, pa nismo ni bili svjesni da višestruki prazni znakovi ne "mogu proći". U tekstu se to slabo može vidjeti, ali između "echo" i parametara postoje dva znaka razmaka, a dopušten je samo jedan!
Za svaki slučaj, stavili smo po jedan razmak između svih opcija i parametara, i sada više nemamo poruku o greški. No, sada zorno vidimo što znači koja "varijabla".
U nastavku ćemo pokazati naprednije primjere i sigurnosne postavke, odnosno tko smije, a tko ne smije pokretati incron.
- Logirajte se za dodavanje komentara
- Inačica za ispis
- PDF version