Accueil Logiciels Incron : exécuter des actions selon des événements du système de fichiers

Incron : exécuter des actions selon des événements du système de fichiers

roues denteesIncron est un outil qui exécute des actions selon des événements du système de fichiers. Plus clairement : alors que le scheduler Linux "cron" exécute des tâches selon un calendrier et des heures, Incron exécute par exemple une action dès qu'un fichier a été créé, modifié, supprimé...

Exemple : j'ai un répertoire "download" dans lequel je télécharge des fichiers provenant d'Internet. Je souhaite que certains types de fichiers soient automatiquement transférés dans d'autres répertoires dès que le téléchargement est terminé.

Fichiers PDF -> répertoire "reppdf"
Fichiers ZIP -> répertoire "repzip"


Installation

Ouvrez un Terminal et tapez :

apt-get install incron

Un démon incrond est démarré. Par défaut, il sera démarré à chaque reboot du système.


Configuration

Dans le répertoire /etc se trouvent 3 fichiers de configuration :

incron.conf : fichier de configuration principal
incron.allow : utilisateurs autorisés à utiliser incron
incron.deny : utilisateurs non autorisés à utiliser incron


Si le fichier incron.allow existe, seuls les utilisateurs listés pourront utiliser incron. Pour notre exemple, nous allons le supprimer afin que tous les utilisateurs puissent utiliser incron :

rm /etc/incron.allow


Utilisation

Prérequis

Création des répertoires nécessaires à notre exemple :

cd
mkdir download reppdf repzip


Création du script à exécuter dès qu'un fichier arrive dans le répertoire "download".

Ouvrez votre éditeur favori et faites un copier / coller du script ci-dessous dans un fichier que vous nommerez "incron-script.sh" :

 

#!/bin/bash

echo $1 | grep -i "\.zip"
if [ $? = 0 ]
then
mv ~/download/$1 ~/repzip
fi

echo $1 | grep -i "\.pdf"
if [ $? = 0 ]
then
mv ~/download/$1 ~/reppdf
fi


Configuration Incron

Il faut maintenant indiquer à Incron ce qu'il doit faire. Dans notre cas, Incron exécutera le script "incron-script.sh" lorsqu'un fichier arrive dans le répertoire "download".

Tapez :

incrontab -e

Faites un copier / coller de la ligne ci-dessous, en remplaçant "td" par le nom de votre répertoire personnel :

/home/td/download IN_CLOSE_WRITE /home/td/incron-script.sh $#

Sauvegardez et quittez.

Explications :

Le format de saisie de incrontab est :

<chemin> <type d'événement> <commande à exécuter>

Dans notre cas :

/home/td/download : nom du répertoire à scruter

IN_CLOSE_WRITE : attendre que le fichier soit cloturé en écriture (téléchargement terminé) avant d'exécuter la commande (ou le script)

/home/td/incron-script.sh $# : exécuter le script incron-script.sh avec le paramètre $# (nom du fichier qui arrive dans le répertoire "download")


Tests

Téléchargez ou copiez un fichier .pdf et .zip dans le répertoire "download".

Si c'est un fichier .pdf, il sera déplacé du répertoire "download" vers "reppdf".
Si c'est un fichier .zip, il sera déplacé du répertoire "download" vers "repzip".


Evénements Incron

Vous pouvez lister les différents types d'événements en tapant :

man 5 incrontab

On peut par exemple exécuter une commande uniquement lorsqu'un fichier a été lu (IN_ACCESS), modifié (IN_MODIFY), etc.


Notez la différence entre IN_CREATE et IN_CLOSE WRITE :

IN_CREATE : la commande est déclenchée lorsque le fichier est créé MAIS pas "terminé". Dans le cas d'un téléchargement qui dure 2 mn dans notre répertoire "download", la commande se déclencherait dès la création du fichier SANS ATTENDRE LA FIN DU TELECHARGEMENT. L'operation de déplacement échouerait.

IN_CLOSE_WRITE : on attend que le fichier soit cloturé, dans notre cas, que le téléchargement SOIT TERMINE avant de déclencher la commande ou le script.


Liste des types d'événements :

EVENT SYMBOLS

These basic event mask symbols are defined:

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 (*)

When monitoring a directory, the events marked with an asterisk (*) above can occur for files in the directory, in which case the name field in the returned event data identifies the name of the file within the directory.

The IN_ALL_EVENTS symbol is defined as a bit mask of all of the above events. Two additional convenience symbols are IN_MOVE, which is a combination of IN_MOVED_FROM and IN_MOVED_TO, and IN_CLOSE which combines IN_CLOSE_WRITE and IN_CLOSE_NOWRITE.

The following further symbols can be specified in the mask:

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

Additionaly, there is a symbol which doesn’t appear in the inotify symbol set. It it IN_NO_LOOP.
This symbol disables monitoring events until the current one is completely handled (until its child process exits).


Wildcards Incron

Toujours dans notre exemple, losqu'un fichier est déposé dans le répertoire "download", on récupère son nom grâce à la wildcard $#.

Voici les autres informations que vous pouvez récupérer :

WILDCARDS

The following wildards may be used inside command specification:

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


Contrôles

Dès qu'Incron exécute une action, celle-ci est écrite dans la syslog.

Exemple :

tail /var/log/syslog

Oct 20 10:18:28 ode1it26 incrond[15192]: (td) CMD (/home/td/incron-script.sh toto.zip)
Oct 20 10:19:44 ode1it26 incrond[15192]: (td) CMD (/home/td/incron-script.sh toto.pdf)

Notez que les wildcards sont remplacées par la valeur réelle.

Mis à jour (Samedi, 26 Novembre 2011 12:15)