Action sur événement avec Incron

Samuel Chevalley
5 avril 2018

Incron est le diminutif de inotify crontab qui est donc un outil qui exécute des actions selon des événements du système de fichiers.

Comme avec crontab, modifier la incrontab avec :

incrontab -e

 

Le format est du type :

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

Exemple : /etc/httpd/conf.d/monsite.cfg IN_MODIFY /home/apache/reload_apache.sh

Remarque : Il vaut mieux passer par un script plutôt qu’une commande directement car ces dernières ne sont pas toutes reconnues …

Les différents types d’événements :

Type d’événement Signification
IN_ACCESS le fichier a été accédé (lecture)
IN_ATTRIB les métadonnées du fichier ont été modifiées (permissions, timestamp, attributs étendus, etc)
IN_CLOSE_WRITE fermeture d’un fichier avec écriture. On attend que le fichier soit clôturé, dans notre cas, que le téléchargement SOIT TERMINE avant de déclencher la commande ou le script
IN_CLOSE_NOWRITE fermeture d’un fichier sans écriture
IN_CREATE fichier ou répertoire créé dans un répertoire surveillé. Attention : 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 TÉLÉCHARGEMENT. L’opération de déplacement échouerait.
IN_DELETE fichier ou répertoire supprimé dans un répertoire surveillé
IN_DELETE_SELF le fichier ou répertoire surveillé est supprimé
IN_MODIFY le fichier ou répertoire a été modifié
IN_MOVE_SELF le fichier ou répertoire a été déplacé
IN_MOVED_FROM un fichier du répertoire surveillé à été déplacé
IN_MOVED_TO un fichier a été déplacé dans le répertoire surveillé
IN_ALL_EVENTS combinaison de tous ce qui précède
IN_MOVE équivalent à IN_MOVED_FROM ou IN_MOVED_TO
IN_CLOSE équivalent à IN_CLOSE_WRITE ou IN_CLOSE_NOWRITE

 

Il est possible de spécifier à la commande plusieurs variables :

Wildcard Signification
$# nom du fichier ou non du dossier sur lequel l’événement est intervenu
$@ chemin complet (dossier) du fichier/répertoire surveillé
$% nom (textuel) de l’événement intervenu
$& numéro de l’événement intervenu