GNU/Linux >> Znalost Linux >  >> Debian

Jak spouštět příkazy při změnách souborů/adresářů pomocí Incron v Debianu

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 může být adresář (to znamená, že se sleduje adresář a/nebo soubory přímo v tomto adresáři (nikoli soubory v podadresářích tohoto adresáře!)) nebo soubor.

může být jedna z následujících:

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                            je

Naví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 -e

a 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 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.

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 -l
server1:~# incrontab -l
/etc/apache2/apache2.conf IN_MODIFY /usr/sbin/service apache2 restart
/etc/apache2/vhosts/ IN_MODIFY /usr/sbin/service apache2 restartovat

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

  • Debian http://www.debian.org
  • Incron Software:http://inotify.aiken.cz/?section=incron&page=about&lang=cs

Debian
  1. Jak šifrovat adresář pomocí EncFS na Debian 9 Stretch Linux

  2. Jak spouštět příkazy při změnách souboru nebo adresáře pomocí Incron na Ubuntu

  3. Jak propojím příkazy v souboru s přednastavením debianu?

  1. Spouštění příkazů při změnách souborů/adresářů pomocí Incron na Debian Etch

  2. Jak nastavit web pro sdílení souborů s Jirafeau na Debianu 10

  3. Jak skenovat server Debian na rootkity pomocí Rkhunter

  1. Jak nastavit firewall s UFW na Debianu 10

  2. Jak nainstalovat Go na Debian 9

  3. Jak změnit oprávnění k souborům a adresářům pomocí Správce souborů