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.

Kuharice: 
Kategorije: 
Vote: 
5
Vaša ocjena: Nema Average: 5 (1 vote)