Qu guida mostra come puoi 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 di file, cambiamenti di permessi, ecc.).
Questo documento viene fornito senza alcuna garanzia di alcun tipo! Non rilascio alcuna garanzia 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:
| [...] 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 eseguiamo
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’uso di incron è molto simile all’uso di cron. Hai il comando incrontab che ti consente di elencare ( -l), modificare ( -e) e rimuovere ( -r) le voci di incrontab. Per saperne di più, vedi
Lì troverai anche la seguente sezione:
Se /etc/incron.allow esiste, solo gli utenti elencati qui possono utilizzare incron. Altrimenti, se /etc/incron.deny esiste, solo gli utenti NON elencati qui possono utilizzare incron. Se nessuno di questi file esiste, tutti sono autorizzati a utilizzare incron. (Nota importante: Questo comportamento non è sicuro e probabilmente sarà cambiato per essere compatibile con lo stile utilizzato da ISC Cron.) La posizione di questi file può essere cambiata nella configurazione.
Questo significa che se vogliamo utilizzare incrontab come root, dobbiamo o eliminare /etc/incron.allow (cosa non sicura perché allora ogni utente di sistema può utilizzare incrontab)…
… oppure aggiungere root a quel file (raccomandato):
| root |
Prima di farlo, riceverai messaggi di errore come questo quando cerchi di 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
per creare lavori incron. Prima di farlo, diamo un’occhiata a
perché spiega il formato delle crontab. Fondamentalmente il formato è il seguente…
…dove può essere una directory (significa che la directory e/o i file direttamente in quella directory (non i file nelle sottodirectory di quella directory!) vengono monitorati) o un file.
può essere uno dei seguenti:
```
IN_ACCESS File è stato accesso (lettura) (*)
IN_ATTRIB Metadata cambiata (permissi, timestamp, attributi estesi, ecc.) (*)
IN_CLOSE_WRITE File aperto per scrittura è stato chiuso (*)
IN_CLOSE_NOWRITE File non aperto per scrittura è stato chiuso (*)
IN_CREATE File/directory creato nella directory monitorata (*)
IN_DELETE File/directory eliminato dalla directory monitorata (*)
IN_DELETE_SELF File/directory monitorato è stato stesso eliminato
IN_MODIFY File è stato modificato (*)
IN_MOVE_SELF File/directory monitorato è stato stesso spostato
IN_MOVED_FROM File spostato fuori dalla directory monitorata (*)
IN_MOVED_TO File spostato nella directory monitorata (*)
IN_OPEN File è stato aperto (*)
```
Quando si monitora una directory, gli eventi contrassegnati con un asterisco (*) sopra possono verificarsi per i file nella directory, nel qual caso il campo 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 sopra. Due simboli di convenienza aggiuntivi 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.
I seguenti ulteriori simboli possono essere specificati nella maschera:
```
IN_DONT_FOLLOW Non dereferenziare il pathname se è un link simbolico
IN_ONESHOT Monitora il pathname solo per un evento
IN_ONLYDIR Monitora il pathname solo se è una directory
```
In aggiunta, c'è un simbolo che non appare nel set di simboli inotify. È IN_NO_LOOP. Questo simbolo disabilita il monitoraggio degli eventi fino a quando quello attuale non è completamente gestito (fino a quando il suo processo figlio esce).
è il comando che dovrebbe essere eseguito quando si verifica l'evento. I seguenti caratteri jolly possono essere utilizzati all'interno della specifica del comando:
```
$$ simbolo del dollaro
$@ percorso del filesystem monitorato (vedi sopra)
$# nome del file relativo all'evento
$% flag dell'evento (testualmente)
$& flag dell'evento (numericamente)
```
Se monitori una directory, allora $@ contiene il percorso della directory e $# il file che ha attivato l'evento. Se monitori un file, allora $@ contiene il percorso completo del file e $# è vuoto.
Se hai bisogno dei caratteri jolly ma non sei sicuro di cosa traducano, puoi creare un lavoro incron come questo:
| ```
/tmp/ IN_MODIFY echo "$ $@ $# $% $&"
``` |
Poi crei o modifichi un file nella directory /tmp e dai un'occhiata a /var/log/syslog - questo log mostra quando un lavoro incron è stato attivato, se ha avuto successo o se ci sono stati errori, e quale era il comando effettivo che ha eseguito (cioè, 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 $@ 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 cambiamenti, voglio che incron riavvii Apache. Ecco come 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. Per scopi 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