GNU/Linux >> Znalost Linux >  >> Ubuntu

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

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  je adresář nebo soubor. Vezměte prosím na vědomí, že incron není schopen sledovat soubory v podadresářích adresáře, který jste nastavili, takže budou sledovány pouze soubory v tomto adresáři.

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

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 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/testdir

Poté otevřete incrontab:

incrontab -e

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

Pojď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 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 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 -l
server1:~# 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 -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

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

  2. Jak změnit pracovní adresář při otevření souboru dvojitým kliknutím na plochu Ubuntu?

  3. Jak spustit skript shellu, když se změní soubor nebo adresář?

  1. Jak nainstalovat Go na Ubuntu 20.04

  2. Jak spustit program Hadoop MapReduce na Ubuntu 16.04

  3. Jak nainstalovat soubor deb v Ubuntu (s příklady)

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

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

  3. Jak chránit soubor Zip heslem na Ubuntu 18.04 LTS