Feb 272011
 

inotifyIn un articolo precedente avevo parlato di Inotify.

inotify è un sottosistema del kernel di Linux che agisce per estendere le funzionalità del filesystem per notare dei cambiamenti nel filesystem, e segnalare le modifiche alle applicazioni. Esso sostituisce il precedente, dnotify, che aveva obiettivi simili.

L’altra volta mi ero concentrato sulla funzionalità di inotifywait un comando che si può utilizzare da shell per attendere un certo evento e poi eseguire altre funzionalità, mentre oggi vedremo alcuni utilizzi di incron.

Questo programma è un “inotify cron” del sistema. Si tratta di un demone e un manipolatore di tabelle. Si può usare in modo simile al cron regolare. La differenza è che inotify cron gestisce gli eventi del filesystem piuttosto che i periodi di tempo.


Perché utilizzare incron

incron fornisce un modo semplice per risolvere molte e varie situazioni. Ogni volta che qualcosa dipende da eventi del file system è un lavoro per incron.

Qui potete vedere alcuni esempi in cui incron è una buona soluzione:

  • notifica programmi (ad esempio demoni server) sui cambiamenti nella configurazione.
  • controllare cambiamenti nei file critici (con i loro eventuale recupero).
  • monitoraggio sull’utilizzo di file, statistiche.
  • pulizia automatica dopo crash.
  • backup automatico quando avviene un cambiamento o versionamenti.
  • notifica di nuova posta (per maildir).
  • notifica di upload sul server.
  • Gestione dell’installazione.

Installazione

Incron è presente come pacchetto all’interno di Ubuntu e Debian quindi per installarlo basta lanciare aptitude install incron

Usare incron

incron è molto simile nei concetti ed utilizzo all’usare cron, visto che l’interfaccia è un clone di esso.

Ogni utente a cui è permesso utilizzare incron può utilizzare il comando incrontab per vedere e modificare le regole presenti. Queste regole vengono elaborate tramite il demone, e quando esiste una corrispondenza il relativo comando viene eseguito.

Per elencare le attuali regole che hai definito si può utilizzare “incrontab -l“, e per modificarle si può utilizzare”incrontab -e“. Se provate ad utilizzarlo ora si visualizzerà il seguente messaggio di errore:

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

Questo errore può essere risolto in due modi:

Permette all’utente root di far uso diincron: Modificando /etc/incron.allow, aggiungendo ‘root’ al file.
Permettendo a tutti gli utenti locali di usare incron: Cancellando il file /etc/incron.allow.

Le righe della tabella di incron hanno la seguente sintassi (uso di uno o più spazi tra gli elementi):

[Percorso] [mask] [comando]

Dove:

  • Percorso è un percorso di un filesystem (ogni spazio nel nome deve essere preceduto da un backslash)
  • mask è una maschera simbolica o numerica (usare virgole per separare gli elementi) che descrive l’evento
  • comando è un’applicazione o script da eseguire all’avvenimento dell’evento

La lista completa di simboli utilizzabili nel campo mask include:

  • IN_ACCESS File è stato acceduto (lettura)
  • IN_ATTRIB I Metadata sono cambiati (permessi, timestamps, attributi estesi, etc.)
  • IN_CLOSE_WRITE File aperto per la scrittura è stato chiuso
  • IN_CLOSE_NOWRITE File non aperto per la scrittura è stato chiuso
  • IN_CREATE File/directory creata nel percorso osservato
  • IN_DELETE File/directory cancellata nel percorso osservato
  • IN_DELETE_SELF Il percorso osservato (file/directory) è stato cancellato
  • IN_MODIFY File è stato modificato
  • IN_MOVE_SELF Il percorso osservato (file/directory) è stato spostato
  • IN_MOVED_FROM File spostato fuori dal percorso osservato
  • IN_MOVED_TO File mosso dentro il percorso osservato
  • IN_OPEN File è stato aperto

La mask può contenere anche IN_NO_LOOP un simbolo speciale che disabilita gli eventi durante l’elaborazione dell’evento (per evitare loop).

Il comando può contenere questi simboli speciali:

  • $$ – Segno del dollaro
  • $@ – il percorso che si sta osservando (see above)
  • $# – il nome del file collegato all’evento
  • $% – la flag dell’evento (testo)
  • $& – la flag dell’evento (numerica)


Esempi di uso

/tmp/spool IN_CLOSE_WRITE /usr/local/bin/run-spool $@/$#

Questo vuol dire “Guarda /tmp/spool, e quando un evento IN_CLOSE_WRITE capita, lancia /usr/local/bin/run-spool con il nome del file che è stato creato”.

Create i vostri backup

Questo piccolo script fa una copia di backup di tutti i file nella directory /etc e MyProject.

 vi /root/inotify.sh

—-

 #!/bin/sh
 
 # Create a inotify backup dir (if not exists)
 #
 mkdir /var/backups/inotify
 
 # Make a copy off the full path and file
 #
 cp -p --parents $1  /var/backups/inotify
 
 # move the file to a file with datetime-stamp
 #
 mv /var/backups/inotify$1 /var/backups/inotify$1_`date +'%Y-%m-%d_%H:%M'

Rendete il file eseguibile per root

 chmod 755 /root/inotify.sh

Aprite

 incrontab -e

Ed aggiungete

 /etc IN_CLOSE_WRITE,IN_MODIFY /root/inotify.sh $@/$#
 /home/andries/myProject IN_CLOSE_WRITE /root/inotify.sh $@/$#

Così ogni volta che un file viene scritto nelle directory controllate viene anche salvato nella directory indicata per il backup.
Riferimenti:
http://inotify.aiken.cz/?section=incron&page=doc&lang=en
http://www.debian-administration.org/article/Running_programs_when_filesystem_events_occur

Popular Posts:

Flattr this!

  3 Responses to “Incron – cron basato sugli eventi del FS”

  1. unfortunately incron doesn’t have recursive auto subscriptions, i.e. if I want to watch an entire tree and automatically subscribe to new directories being created.

    look at lsyncd, although it is primarily meant as a syncing tool, you can configure any action on an event.

    • Thanks for the note Aleksandar. I’ll take a look for sure to lsyncd.
      Do you use it to replicate data or do backups ?

  2. I am not sure if your script will work as intended
    1. mkdir -p /var/backups/inotify
    The -p will make sure that the dir is created when it not exists

    2. cp -p –parents $1 /var/backups/inotify
    i have no idea why you need parents but -a (archive) may be more useful

    2a. make use of the cp backup faclity
    cp –backup=numbered will make simply number your backups automaticly.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

*