sys.portal
Published on sys.portal (https://sysportal.carnet.hr)

Početna > Isprobajte incron (inode cron)

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 [1] .

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 [2], 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.

sri, 2016-08-31 13:51 - Zdravko Rašić
Kuharice: 
Linux [3]
Kategorije: 
Servisi [4]
Vote: 
5
Vaša ocjena: Nema Average: 5 (1 vote)

Copyright ©2003.-2017. CARNet. Sva prava pridržana.
Mail to portal-team(at)CARNet.hr

Google+


Source URL: https://sysportal.carnet.hr/node/1673

Links
[1] https://en.wikipedia.org/wiki/Inotify
[2] https://zipizap.wordpress.com/2013/11/15/incron/
[3] https://sysportal.carnet.hr/taxonomy/term/17
[4] https://sysportal.carnet.hr/taxonomy/term/28