GNU/Linux >> Linux Esercitazione >  >> Debian

Attivazione di comandi su modifiche di file/directory con Incron su Debian Etch

Questa guida mostra come installare e utilizzare incron su un sistema Debian Etch. Incron è simile a cron, ma invece di eseguire comandi in base al tempo, può attivare comandi quando si verificano eventi di file o directory (ad es. una modifica del file, modifiche dei permessi, ecc.).

Questo documento viene fornito senza garanzie di alcun tipo! Non garantisco che questo funzionerà per te!

1 Installazione di Incron

Incron è disponibile nel repository etch-backports, quindi dobbiamo aggiungere la seguente riga a /etc/apt/sources.list:

vi /etc/apt/sources.list
[...]
deb http://www.backports.org/debian etch-backports main contrib non-free
[...]

Importiamo la chiave dell'archivio backports.org in apt...

wget -O - http://backports.org/debian/archive.key | apt-key add -

... e corri

apt-get update

Il repository etch-backports è inattivo per impostazione predefinita, quindi per installare incron da esso, dobbiamo usare il seguente comando:

apt-get -t etch-backports install incron

2 Utilizzo di Incron

L'utilizzo di Incron è molto simile all'utilizzo di cron. Hai il comando incrontab che ti consente di elencare (-l), modificare (-e) e rimuovere (-r) le voci incrontab. Per saperne di più, vedi

man incrontab

Lì trovi anche la seguente sezione:

Se /etc/incron.allow esiste solo gli utenti elencati qui possono usare incron. Altrimenti se /etc/incron.deny esiste solo gli utenti NON elencati qui possono usare incron. Se nessuno di questi file esiste, tutti possono usare incron. (Nota importante:questo comportamento non è sicuro e sarà probabilmente modificato per essere compatibile con lo stile utilizzato da ISC Cron.) La posizione di questi file può essere modificata nella configurazione.

Ciò significa che se vogliamo usare incrontab come root, dobbiamo eliminare /etc/incron.allow (che non è sicuro perché ogni utente del sistema può usare incrontab)...

rm -f /etc/incron.allow

... o aggiungi root a quel file (consigliato):

vi /etc/incron.allow
root

Prima di farlo, riceverai messaggi di errore come questo quando proverai a utilizzare incrontab:

server1:~# incrontab -l
user 'root' is not allowed to use incron
server1:~#

Dopo funziona:

server1:~# incrontab -l
no table for root
server1:~#

Possiamo usare

incrontab -e

per creare lavori incron. Prima di farlo, diamo un'occhiata a

man 5 incrontab

perché spiega il formato dei crontab. Fondamentalmente il formato è il seguente...

<path> <mask> <command>

...dove può essere una directory (che significa che la directory e/o i file direttamente in quella directory (non i file nelle sottodirectory di quella directory!) sono guardati) o un file.

può essere uno dei seguenti:

IN_ACCESS           File was accessed (read) (*)
IN_ATTRIB           Metadata changed (permissions, timestamps, extended attributes, etc.) (*)
IN_CLOSE_WRITE      File opened for writing was closed (*)
IN_CLOSE_NOWRITE    File not opened for writing was closed (*)
IN_CREATE           File/directory created in watched directory (*)
IN_DELETE           File/directory deleted from watched directory (*)
IN_DELETE_SELF           Watched file/directory was itself deleted
IN_MODIFY           File was modified (*)
IN_MOVE_SELF        Watched file/directory was itself moved
IN_MOVED_FROM       File moved out of watched directory (*)
IN_MOVED_TO         File moved into watched directory (*)
IN_OPEN             File was opened (*)

Durante il monitoraggio di una directory, gli eventi contrassegnati da un asterisco (*) sopra possono verificarsi per i file nella directory, nel qual caso il campo del nome nei
dati dell'evento restituito identifica il nome del file all'interno della directory.

Il simbolo IN_ALL_EVENTS è definito come una maschera di bit di tutti gli eventi di cui sopra. Due ulteriori simboli di convenienza sono IN_MOVE, che è una combinazione di IN_MOVED_FROM e IN_MOVED_TO, e IN_CLOSE che combina IN_CLOSE_WRITE e IN_CLOSE_NOWRITE.

Nella maschera possono essere specificati i seguenti ulteriori simboli:

IN_DONT_FOLLOW      Don't dereference pathname if it is a symbolic link
IN_ONESHOT          Monitor pathname for only one event
IN_ONLYDIR          Only watch pathname if it is a directory

Inoltre, c'è un simbolo che non appare nel set di simboli inotify. È IN_NO_LOOP. Questo simbolo disabilita il monitoraggio degli eventi finché quello corrente non viene completamente gestito (fino alla chiusura del processo figlio).

è il comando da eseguire quando si verifica l'evento. I seguenti jolly possono essere utilizzati all'interno della specifica del comando:

$$   dollar sign
[email protected]   watched filesystem path (see above)
$#   event-related file name
$%   event flags (textually)
$&   event flags (numerically)

Se guardi una directory, [email protected] conserva il percorso della directory e $# il file che ha attivato l'evento. Se guardi un file, [email protected] conserva il percorso completo del file e $# è vuoto.

Se hai bisogno dei caratteri jolly ma non sei sicuro di cosa si traducano, puoi creare un processo incron come questo:

/tmp/ IN_MODIFY echo "$$ [email protected] $# $% $&"

Quindi crei o modifichi un file nella directory /tmp e dai un'occhiata a /var/log/syslog:questo registro mostra quando è stato attivato un processo incron, se è riuscito o se ci sono stati errori e quale era il comando effettivo è stato eseguito (ovvero, i caratteri jolly vengono sostituiti con i loro valori reali).

tail /var/log/syslog
...
Aug 21 17:26:50 server1 incrond[7111]: (root) CMD (echo "$ /tmp huhu IN_CREATE 256")

In questo esempio ho creato il file /tmp/huhu; come vedi [email protetta] si traduce in /tmp, $# in huhu, $% in IN_CREATE e $&in 256.

Ora basta teoria. Creiamo i nostri primi lavori incron. Vorrei monitorare il file /etc/apache2/apache2.conf e la directory /etc/apache2/vhosts/, e ogni volta che ci sono modifiche, voglio che incron riavvii Apache. Ecco come lo facciamo:

incrontab -e
/etc/apache2/apache2.conf IN_MODIFY /etc/init.d/apache2 restart
/etc/apache2/vhosts/ IN_MODIFY /etc/init.d/apache2 restart

Questo è tutto. A scopo di test puoi modificare la tua configurazione di Apache e dare un'occhiata a /var/log/syslog, e dovresti vedere che incron riavvia Apache.

Per elencare tutti i lavori incron definiti, puoi eseguire

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

Per eliminare tutti i lavori incron dell'utente corrente, esegui

incrontab -r
server1:~# incrontab -r
removing table for user 'root'
table for user 'root' successfully removed
server1:~#

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

Debian
  1. Come crittografare la directory con EncFS su Debian 9 Stretch Linux

  2. Come configurare un sito Web di condivisione file con Jirafeau su Debian 10

  3. Oltre 10 comandi VI Linux con esempi

  4. Debian – -bash:/usr/bin/nano:nessun file o directory di questo tipo?

  5. Annunci forzati su ISPConfig con Debian Etch

Monitoraggio di più sistemi con munin (Debian Etch)

Installazione di Lighttpd con PHP5 e supporto MySQL su Debian Etch

Guida introduttiva ai comandi ad hoc di Ansible

Come leggere un file con spazi in Linux

Due comandi per trovare facilmente file e directory in Debian 11

I 30 migliori comandi Linux