Portál AbcLinuxu, 2. května 2025 20:32

incron (inotify cron)

15.9.2006 15:12 | Přečteno: 1776× | Software | Výběrový blog

Když jsem před časem psal o inotify-cxx, objevil se v diskusi nápad na vytvoření démona, který by fungoval jako cron, ale reagoval by na události ve filesystému. Trochu jsem o tom zauvažoval, a došlo mi, jak dobrá věc by to byla, se spoustou možností využití. Proto jsem po volných chvilkách zbastlil něco, co by mohlo příslušné požadavky plnit.

inotify je dobrá věc, to je jasné. Je ovšem škoda, že se zatím používá jen zřídka, i když už je v jádře docela dlouho. Sledovat události v souborovém systému se může hodit z celé řady důvodů. Proto se zcela logicky objevila poptávka po programu, který by se pověsil na určitá místa (adresáře, soubory) a na základě událostí volal další programy nebo skripty.

Když se tehdy taková věc objevila v diskusi, nejprve jsem to poněkud zavrhl. Protože se ale ukázalo, k čemu všemu se takový program hodí, rozhodl jsem se něco takového napsat. Je to šité pořádně horkou jehlou, proto je jasné, že o chyby nebude nouze. Již nyní vím o řadě z nich (včetně nechutných prasáren, jako je volání wait() v handleru signálu SIGCHLD), ale bude jich určitě mnohem víc.

Celý systém je navržen tak, aby se používal podobně jako obyčejný cron. Má tedy dvě části - démona (incrond) a manipulační program (incrontab). Démon se spustí (pod rootem, např. z init skriptu), načte tabulky uživatelů a pověsí se na adresář s tabulkami - změny v tabulkách se tedy projeví okamžitě.

Manipulační program se používá prakticky stejně jako jeho vzor, program crontab. Lze vypsat tabulku, smazat ji, editovat (oblíbeným editorem podle proměnné EDITOR) nebo importovat ze souboru. Argumenty programu a další věci okolo toho se prakticky neliší od programu crontab.

Tabulka obsahuje řádky pro jednotlivé sledované cesty. Řádek vypadá takto:

<cesta> <maska> <příkaz>

Cesta může být libovolná ve filesystému, ale s mezerami apod. si program zatím neporadí. Masku lze zadat buď číselně, nebo lépe přímo symbolicky (symboly oddělené čárkou) podle headeru inotify.h. Příkaz může být binárka nebo skript, s absolutní cestou i bez ní (použije se PATH). Nemůže obsahovat přesměrování, roury ani nic podobného, zato lze ale používat speciální symboly. $@ znamená cestu zadanou na začátku řádku, $# název souboru, kde došlo k události, a $$ je pro samotný znak dolaru. Může to pak vypadat následovně:

/var/mail IN_CLOSE_WRITE,IN_MOVED_TO my_notify $#

Uvedený příklad bude sledovat adresář /var/mail, a když někdo zapíše do souboru v adresáři, nebo tam přesune soubor odjinud, spustí se program my_notify s názvem souboru jako argumentem. Jak prosté...

Kdo má zájem program použít, nechť stahuje. Budu velice vděčný za každou připomínku nebo námět. Také bych ocenil, kdyby se nějaký znalec na bezpečnost podíval na program i z tohoto pohledu - žonglování s efektivními právy a další podobné lahůdky nejsou mojí parketou. Program je založen na rozhraní inotify-cxx, který se současně posunulo do verze 0.2.0.

Než skončím, ještě pro informaci připomenu několik možností použití této hračky:

Odkazy:

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

15.9.2006 15:32 lefti | skóre: 18 | blog: OneAndOnlyTrueBlog
Rozbalit Rozbalit vše Re: incron (inotify cron)
Odpovědět | Sbalit | Link | Blokovat | Admin
Resis nejak pripady rekurze? (treba kdyz po IN_ATTRIB spustim chmod/chown/touch)
Luk avatar 15.9.2006 16:24 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: incron (inotify cron)
Řeším :-D

Upřímně řečeno, nenapadá mě způsob, jak by to šlo čistě vyřešit. Sice by šlo zakázat příjem nebo zpracování událostí během obsluhy, ale to nerozlišuje (a ani to nejde) sekundární události způsobené reakcí na prvotní událost, a ty ostatní. Proto si myslím, že by se v těchto případech tíha měla přenést na reagující program (např. zámkem - takže se sice program spustí znovu, ale když bude mít přístup blokovaný, ihned skončí).
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
15.9.2006 17:15 lefti | skóre: 18 | blog: OneAndOnlyTrueBlog
Rozbalit Rozbalit vše Re: incron (inotify cron)
Asi by to chtelo poresit s vyvojarema inotify.
Luk avatar 15.9.2006 18:08 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: incron (inotify cron)
To by bylo možná nejlepší řešení. Ale je otázka, co vlastně chtít - zda možnost zjišťovat původce události (PID apod.) nebo něco jiného.
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
19.9.2006 17:04 lefti | skóre: 18 | blog: OneAndOnlyTrueBlog
Rozbalit Rozbalit vše Re: incron (inotify cron)
Imho toto bude relativni casty pripad, pokud to nekdo bude pouzivat.
Luk avatar 19.9.2006 17:32 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: incron (inotify cron)
Přidal jsem si to jako feature do další verze (jak pro inotify-cxx, tak incron). Bude možnost deaktivovat určité události. V incronu se to projeví tak, že se událost deaktivuje po dobu běhu obslužného procesu. Bude se to zapínat explicitně v řádku tabulky pro incron.
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.