GNU/Linux >> Znalost Linux >  >> Debian

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

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 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 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:~#

  • incron:http://inotify.aiken.cz/?section=incron&page=about&lang=cs

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

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

  3. 10+ Linux VI příkazy s příklady

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

  2. Vytváření jednoduchých virtuálních hostitelů pomocí mod_mysql_vhost na Lighttpd (Debian Etch)

  3. Jak skenovat server Debian na rootkity pomocí Rkhunter

  1. Debian 4.0 (Etch) Samostatný server Samba s backendem tdbsam

  2. Debian – -bash:/usr/bin/nano:Žádný takový soubor nebo adresář?

  3. Vynucené reklamy na ISPConfig s Debian Etch