Accueil > Système > inotify / incron : Lancer une commande en cas d’action sur un fichier/un répertoire

inotify / incron : Lancer une commande en cas d’action sur un fichier/un répertoire

19/10/2023 Categories: Système Tags: , , ,
Print Friendly, PDF & Email

inotify”, Remplaçant de “dnotify”, est une technologie, intégrée au noyau Linux (>=2.6.13) , destinée à notifier les événements, modifications, accès, etc, effectués sur le contenu d’un système de fichiers en ce basant sur le contrôle des “inodes” (structures de données contenant des informations sur les fichiers d’un systèmes de fichiers).

« incron« , Pour « INotify CRON », permet d’exploiter les informations « d’inotify » afin d’effectuer une action, commande(s), scripts, etc, en cas de modifications de fichiers ou de répertoires donnés.

Installation de inotify

« inotify » Est intégré au noyau et est activé dans les kernels fournis par les distributions.

« incron » Est, de son côté, empaqueté sur la plupart des distributions mais nécessitera, sur Red Hat et ses dérivées (CentOS, Scientific Linux, etc) l’ajout des miroirs EPEL (« Extra Packages for Enterprise Linux » voir « Ajout des miroirs EPEL (Extra Packages for Enterprise Linux) sous Red Hat like (CentOS, RHEL, SL, …) » sur Admin Linux). L’installation s’effectue via le gestionnaire de paquet de votre distribution.

Sous Ubuntu, Debian et ses dérivés :

# apt-get install incron

Sous les dérivés de Red Hat :

# yum install incron

Sous Gentoo Linux « emerge » se chargera de l’installation tous comme « pacman » le fera très bien sous Arch Linux.

Configuration et utilisation

L’utilisation d’ »incron » est calquée sur le fonctionnement de « cron ».

Fichiers de configuration

L’ensemble est configuré via les fichiers :

  • /etc/incron.conf : le fichier de configuration principal ;
  • /etc/incron.d/ : répertoire contenant la définition de fichiers/de répertoires à monitorer ;
  • /etc/incron.{allow,deny} : fichier définissant les utilisateurs autorisés à utiliser l’outil ;
Lire aussi:  How do I Find Out Linux CPU Utilization?

Les fichiers de configurations sont largement commentés et explicites, nous ne nous étendrons pas dessus dans cet article. Pensez simplement à ajouter à « /etc/incron.allow » la liste des utilisateurs autorisés à utiliser l’outil.

mafalda ~ # cat /etc/incron.allow 
root

Ajout d’une entrée

Comme pour l’ajout d’une nouvelle entrée dans « cron » via « crontab -e », une nouvelle entrée dans « incron » peut être ajoutée via « incrontab -e » ou par la création d’un fichier dans « /etc/incron.d/ ».

Le format des entrées est de la forme :

<fichier/répertoire> <notification à vérifier> <commande et options>

Note : Le séparateur entre les champs est l’espace.

avec :

  • « <fichier/répertoire> » : le fichier ou le répertoire à surveiller ;
  • « <notification à vérifier> » : le type de modification engendrant l’exécution de la commande parmi (valeurs reprises du man d’inotify http://linux.die.net/man/7/inotify) :
    • 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 ;
    • IN_CLOSE_NOWRITE : fermeture d’un fichier sans écriture ;
    • IN_CREATE : fichier ou répertoire créé dans un répertoire surveillé ;
    • 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 à été déplacé dans le répertoire surveillé ;
    • IN_OPEN : le fichier à été ouvert ;
    • 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 ;

    Plusieurs valeurs sont possibles séparées par des virgules.

  • « <commande et options> » : la commande à exécuter avec ses options ;
Lire aussi:  How to change the MAC address of an Ethernet interface

ATTENTION : incron n’est pas récursif ! Seules les modifications intervenues au premier niveau du répertoire surveillé seront détectées.

La commande peut utiliser un certain nombre de variables prédéfinies :

  • $@ : chemin complet du fichier/répertoire surveillé ;
  • $# : nom du fichier/répertoire sur lequel l’événement est intervenu ;
  • $% : nom (textuel) de l’événement intervenu ;
  • $& : numéro de l’événement intervenu.
  • $$ : le caractère dollar (« $ ») ;

La page de man de « incrontab » (http://linux.die.net/man/5/incrontab) complétera ce descriptif.

Exemples

Recharger la configuration d’apache

Pour recharger la configuration d’apache après modification nous écririons :

/etc/apache2/apache2.conf IN_MODIFY /etc/init.d/apache2 reload
/etc/apache2/sites-enabled/ IN_MODIFY /etc/init.d/apache2 reload
/etc/apache2/conf.d/ IN_MODIFY /etc/init.d/apache2 reload

Chaque modification de l’un des fichiers/répertoires monitorés entraînera un « apache reload ».

Ce qui donne dans les logs :

Apr 24 19:01:41 srv incrond[17190]: (root) CMD (/etc/init.d/apache2 reload)

Note : si « incrond » lance plusieurs fois l’exécution de la commande voir « Les commandes sont exécutées plusieurs fois » dans la section « Problèmes » ci-dessous.

Recharger automatiquement les fichiers de zones dans bind

Le rechargement des fichiers de zones de bind (« /usr/sbin/rndc reload ») en cas de modification ce traduira par exemple par :

/etc/bind/zones/db.admin-linux.fr IN_MODIFY /usr/sbin/rndc reload

Problèmes

Comme dans la plupart des cas, pour déceler la provenance d’éventuels problèmes, reportez vous aux fichiers de logs de votre système.

Les commandes sont exécutées plusieurs fois

Si les commandes sont exécutées plusieurs fois lors de la modification d’un fichier, c’est peut être que le masque (le type d’événement surveillé) n’est pas tout à fait adapté.

Vous pouvez empêcher l’exécution multiple en ajoutant au masque l’option « IN_NO_LOOP » qui désactive la notification d’événement tant que la première commande lancée n’est pas terminée :

/root/data/inventaire.txt IN_MODIFY,IN_NO_LOOP /root/bin/inventory2dns

Impossible d’exécuter « incrontab »… que faire ?

Si lors de l’invocation « d’incrontab » vous obtenez un message de refus du type « not allowed » :

fhh@mafalda ~ $ incrontab -e
user 'fhh' is not allowed to use incron

c’est que l’utilisateur ne fait pas partie du fichier « /etc/incron.allow » :

mafalda ~ # cat /etc/incron.allow 
root

ajoutez le au fichier pour régler ce problème :

mafalda ~ # echo fhh >> /etc/incron.allow

Références

Inotify home page : http://inotify.aiken.cz/
NixCraft : http://www.cyberciti.biz/faq/linux-inotify-examples-to-replicate-directories/

Lire aussi:  Automatically Connect to a Network Drive on Mac OS X Start Up & Login

Source: admin-linux.fr

Les commentaires sont fermés.