Tento výukový program ukazuje, jak můžete použít incron v systému Ubuntu ke spouštění příkazů při změně souboru nebo adresáře. Démon incron je podobný cron, ale místo spouštění příkazů 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.).
1 Instalace aplikace Incron
Následující kroky je třeba spustit jako uživatel root. Přihlaste se prosím do shellu vašeho systému Ubuntu a staňte se rootem pomocí:
sudo su
Software Incron je k dispozici v úložišti Ubuntu. Proto jej nainstaluji s apt takto:
apt-get install incron
3 Jak používat Incron
Jak bylo zmíněno v první kapitole, Incron má mnoho podobností s nástrojem Cron. Tam, kde má Cron svůj příkaz crontab pro správu cronjobů, má Incron příkaz incrontab. Chcete-li zobrazit a upravit položky incrontab, můžete použít příkaz incrontab seznam možností (-l), upravit (-e) a odstranit (-r).
Spuštěním následujícího příkazu získáte úplný přehled o incrontab:
man incrontab
Na stránce manuálu najdete následující poznámku:
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 smazat /etc/incron.allow (což není bezpečné)...
rm -f /etc/incron.allow
... nebo přidáme uživatele root do souboru incron.allow ( což je doporučená možnost). Otevřete soubor /etc/incron.allow:
nano /etc/incron.allow
A přidejte následující řádek.
root
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:~#
Nyní můžeme použít tento příkaz:
incrontab -e
Chcete-li vytvořit úlohy incron. Nyní se podívejme hlouběji na manuálovou stránku, abychom porozuměli syntaxi.
man 5 incrontab
Manuálová stránka zobrazuje formát řádků záložek cron. Formát se řídí tímto schématem:
...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 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, jako je tato.
Vytvořte adresář, který bude sledován:
mkdir /tmp/testdirPoté otevřete incrontab:
incrontab -ea přidejte následující řádek:
/tmp/testdir/ IN_MODIFY echo "$$ [e-mail chráněný] $# $% $&"Poté vytvoříte nebo upravíte soubor v adresáři /tmp/testdir/ 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á je skutečná příkaz byl, že se provedl (tj. zástupné znaky jsou nahrazeny jejich skutečnými hodnotami).
Pro účely testování přidám dva soubory, helloworld.txt a helloworld2.txt v /tmp/testdir/ pomocí příkazu echo:
echo 'Jak se máš?'> /tmp/testdir/helloworld.txt
echo 'Jak se máš?'> /tmp/testdir/helloworld2.txtPojďme tedy zkontrolovat syslog s ocasem, zda obsahuje incron eccenty:
tail /var/log/syslog...
Apr 12 18:49:22 server1 incrond[6441]:(root) CMD (echo "$ /tmp/testdir/ helloworld.txt IN_MODIFY 2")
Apr 12 18 :50:31 server1 incrond[6441]:(root) CMD (echo "$ /tmp/testdir/ helloworld2.txt IN_MODIFY 2")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 /usr/sbin/service apache2 restart/etc/apache2/sites-available/ IN_MODIFY /usr/sbin/service apache2 restartA 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.
POZNÁMKA :V rámci úlohy incronu v adresáři, který monitorujete, neprovádějte žádnou akci, abyste předešli zacyklení. Příklad: Když sledujete změny v adresáři /tmp a každá změna spustí skript, který zapíše soubor protokolu do /tmp, způsobí to smyčku a může způsobit vysoké zatížení vašeho systému nebo dokonce jeho zhroucení.
Chcete-li vypsat všechny definované úlohy incronu, můžete spustit:
incrontab -lserver1:~# incrontab -l
/etc/apache2/apache2.conf IN_MODIFY /usr/sbin/service apache2 restart
/etc/apache2/vhosts/ IN_MODIFY /usr/sbin/service apache2 restartujte
server1:~#Chcete-li odstranit všechny úlohy incronu aktuálního uživatele, spusťte:
incrontab -rserver1:~# incrontab -r
odebírání tabulky pro uživatele 'root'
tabulka pro uživatele 'root' úspěšně odstraněno
server1:~#
4 odkazy
- incron:http://inotify.aiken.cz/?section=incron&page=about&lang=cs