Tato příručka ukazuje, jak nainstalovat a používat incron na systému Debian 9 (Stretch). 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.).
1 předpoklady
- Oprávnění správce systému (přihlášení uživatele root). Všechny příkazy v tomto tutoriálu by měly být spouštěny jako uživatel root v shellu.
- K úpravě souborů použiji editor „nano“. Nano můžete nahradit editorem dle vlastního výběru nebo nainstalovat nano pomocí "apt-get install nano", pokud není nainstalován na vašem serveru.
2 Instalace Incron
Incron je k dispozici v úložišti Debianu, takže incron nainstalujeme pomocí následujícího příkazu apt:
apt-get install incron
Proces instalace by měl být podobný jako na tomto snímku obrazovky.
3 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). Otevřete soubor /etc/incron.allow s nano:
nano /etc/incron.allow
A přidejte následující řádek. Poté soubor uložte.
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
Poté to funguje:
server1:~# incrontab -l
žádná tabulka pro root
Můžeme použít příkaz:
incrontab -e
Chcete-li vytvořit úlohy incron. Než to uděláme, podíváme se na manuálovou stránku incronu:
man 5 incrontab
Manuálová stránka 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, jako je tato. Otevřete incrontab:
incrontab -ea přidejte následující řádek:
/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...
10. ledna 13:52:35 server1 incrond[1012]:(kořen) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")
10. leden 13 :52:36 server1 incrond[1012]:(root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")
Jan 10 13:52:39 server1 incrond[1012]:(root) CMD (echo "$ /tmp hello.txt IN_MODIFY 2")
Jan 10 13:52:39 server1 incrond[1012]:(root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2" )V tomto příkladu jsem upravil soubor /tmp/hello.txt; jak vidíte, [email protected] se překládá do /tmp, $# na hello.txt , $% na IN_CREATE a $&na 256. Použil jsem editor, který vytvořil dočasný soubor .txt.swp, jehož výsledkem jsou další řádky v syslog.
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 se vyhnuli 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 restartovatChcete-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ěno4 odkazy
- Debian http://www.debian.org
- Incron Software:http://inotify.aiken.cz/?section=incron&page=about&lang=cs