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
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).
$$ 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:~#
3 link
- incron:http://inotify.aiken.cz/?section=incron&page=about&lang=en