Tato příručka ukazuje, jak můžete nainstalovat a používat incron na systému Debian Etch. Incron je podobný cron, ale místo toho, aby spouštěl příkazy na základě času, může spouštět příkazy, když dojde k události souboru nebo adresáře (např. úprava souboru, změny oprávnění atd.).
Tento dokument je dodáván bez jakékoli záruky! Neposkytuji žádnou záruku, že to pro vás bude fungovat!
1 Instalace aplikace Incron
Incron je dostupný v úložišti etch-backports, takže do /etc/apt/sources.list musíme přidat následující řádek:
vi /etc/apt/sources.list
[...]deb http://www.backports.org/debian etch-backports hlavní příspěvek nesvobodný[...] |
Pojďme importovat archivní klíč backports.org do apt...
wget -O - http://backports.org/debian/archive.key | apt-key add -
... a spustit
aktualizace apt-get
Úložiště etch-backports je ve výchozím nastavení neaktivní, takže pro instalaci incronu z něj musíme použít následující příkaz:
instalační incron apt-get -t etch-backports
2 Používání nástroje Incron
Použití incronu je velmi podobné použití cronu. Máte příkaz incrontab, který vám umožní vypsat (-l), upravit (-e) a odstranit (-r) položky incrontab. Chcete-li se o něm dozvědět více, viz
man incrontab
Zde také najdete následující sekci:
Pokud /etc/incron.allow existuje, mohou incron používat pouze uživatelé zde uvedení. V opačném případě, pokud existuje /etc/incron.deny, mohou incron používat pouze uživatelé, kteří zde NENÍ uvedeni. Pokud žádný z těchto souborů neexistuje, každý může používat incron. (Důležitá poznámka:Toto chování není bezpečné a bude pravděpodobně změněno, aby bylo kompatibilní se stylem používaným ISC Cron.) Umístění těchto souborů lze změnit v konfiguraci.
To znamená, že pokud chceme použít incrontab jako root, musíme buď smazat /etc/incron.allow (což není bezpečné, protože pak může incrontab používat každý uživatel systému)...
rm -f /etc/incron.allow
... nebo přidat root k tomuto souboru (doporučeno):
vi /etc/incron.allow
kořen |
Než to uděláte, při pokusu o použití incrontab se zobrazí chybové zprávy, jako je tato:
server1:~# incrontab -l
uživatel 'root' nemá povoleno používat incron
server1:~#
Poté to funguje:
server1:~# incrontab -l
žádná tabulka pro root
server1:~#
Můžeme použít
incrontab -e
vytvořit pracovní místa incron. Než to uděláme, podíváme se na
man 5 incrontab
protože to vysvětluje formát crontabů. V zásadě je formát následující...
...kde
IN_ACCESS Soubor byl přístup (čtení) (*)
IN_ATTRIB Metadata změněna (oprávnění, časová razítka, rozšířené atributy atributy , atd.) (*) nízké CLOSE )* otevřené CLOSE Open />IN_CLOSE_NOWRITE Soubor neotevřený pro zápis byl uzavřen (*)
IN_CREATE Soubor/adresář vytvořen v sledovaném adresáři (*)
V souboru IN_DELETE D e směrováno TE *) Soubor File smazáno SE /adresář byl sám smazán
Soubor in_modify byl upraven (*)
in_move_self sledovaný soubor /adresář byl sám přesunut
in_moved_from soubor přesunu sledovaný adresář (*)
IN_OPEN Soubor byl otevřen (*)
Při monitorování adresáře se u souborů v adresáři mohou vyskytnout události označené výše hvězdičkou (*). V takovém případě pole názvu v
vrácených datech události identifikuje název souboru v adresáři.
Symbol IN_ALL_EVENTS je definován jako bitová maska všech výše uvedených událostí. Dva další symboly pohodlí jsou IN_MOVE, což je kombinace IN_MOVED_FROM a IN_MOVED_TO, a IN_CLOSE, který kombinuje IN_CLOSE_WRITE a IN_CLOSE_NOWRITE.
V masce lze specifikovat následující další symboly:
IN_DONT_FOLLOW Neodkazujte název cesty , pokud je symbolickým odkazem
IN_ONESHOT Sledujte název cesty pouze jednu událost
IN_ONLYDIR it ly pokud název předem je jeNavíc existuje symbol, který se neobjevuje v sadě symbolů inotify. Je to IN_NO_LOOP. Tento symbol deaktivuje monitorování událostí, dokud není úplně zpracována aktuální (dokud neskončí její podřízený proces).
je příkaz, který by měl být spuštěn, když dojde k události. Ve specifikaci příkazu lze použít následující zástupné znaky:
$$ znak dolaru
[e-mail chráněno] cesta sledovaného systému souborů (viz výše)
$# název souboru souvisejícího s událostí
$% příznaky události (textově)
$&příznaky události (číselně)Pokud sledujete adresář, pak [email protected] obsahuje cestu k adresáři a $# soubor, který událost spustil. Pokud sledujete soubor, pak [email protected] obsahuje úplnou cestu k souboru a $# je prázdné.
Pokud potřebujete zástupné znaky, ale nejste si jisti, do čeho se překládají, můžete vytvořit úlohu incronu takto:
/tmp/ IN_MODIFY echo "$$ [e-mail chráněný] $# $% $&" |
Poté vytvoříte nebo upravíte soubor v adresáři /tmp a podíváte se na /var/log/syslog - tento protokol ukazuje, kdy byla spuštěna úloha incronu, zda byla úspěšná nebo zda došlo k chybám a jaký byl skutečný příkaz provede se (tj. zástupné znaky jsou nahrazeny jejich skutečnými hodnotami).
tail /var/log/syslog
...
21. srpna 17:26:50 server1 incrond[7111]:(root) CMD (echo "$ /tmp huhu IN_CREATE 256")
V tomto příkladu jsem vytvořil soubor /tmp/huhu; jak vidíte, [email protected] se překládá na /tmp, $# na huhu, $% na IN_CREATE a $&na 256.
Teď dost teorie. Pojďme vytvořit naše první incron joby. Chtěl bych sledovat soubor /etc/apache2/apache2.conf a adresář /etc/apache2/vhosts/, a kdykoli dojde ke změnám, chci, aby incron restartoval Apache. Děláme to takto:
incrontab -e
/etc/apache2/apache2.conf IN_MODIFY /etc/init.d/apache2 restart/etc/apache2/vhosts/ IN_MODIFY /etc/init. d/apache2 restart |
A je to. Pro testovací účely můžete upravit konfiguraci Apache a podívat se na /var/log/syslog a měli byste vidět, že incron restartuje Apache.
Chcete-li vypsat všechny definované úlohy incronu, můžete spustit
incrontab -l
server1:~# incrontab -l
/etc/apache2/apache2.conf IN_MODIFY /etc/init.d/apache2 restart
/etc/apache2/vhosts/ IN_MODIFY /etc/init.d /apache2 restart
server1:~#
Chcete-li odstranit všechny úlohy incronu aktuálního uživatele, spusťte
incrontab -r
server1:~# incrontab -r
odebírání tabulky pro uživatele 'root'
tabulka pro uživatele 'root' úspěšně odstraněno
server1:~#
3 odkazy
- incron:http://inotify.aiken.cz/?section=incron&page=about&lang=cs