Utiliser inotifywait sous Ubuntu

Inotify Tools

Installer les utilitaires inotify-tools

Rien de bien compliqué à ce stade il suiffera de taper la commande habituelle

apt install inotify-tools

Surveiller les modifications d'un dossier avec inotifywait

Dans cet exemple nous allons surveiller le dossier /donnee de notre serveur UBUNTU afin de détecter chaque modification d'un fichier dans ce dossier.

Dans notre cas nous nous contenterons d'afficher un message lors de la modification d'un fichier mais il serait bien sur très simple de remplacer ce simple affichage par une commande de sauvegarde de type rsync par exemple ou tout autre traitement complexe..

#!/bin/sh
inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w %f %e' /donnee |
while read date time dir file event ; do
   echo "'$dir' '$file' : '$event' le ${date} à ${time}"
done

Dans l'exemple ci dessus on utilise l'option --format qui permet de spécifier les variables qu'on souhaite passer à la boucle while (time, dir, file events).

Il serait ainsi très simple d'adapter le traitement à effectuer en fonction de l'évènement détecté (création suppression, modification)

Il est également possible de restreindre la surveillance du dossier à certains évènements. Par exemple si on souhaite surveiller les modifications de fichiers  de fichier on utilisera l'option -e modify comme ci dessous :

#!/bin/sh
inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w %f %e' -e modify /donnee |
while read date time dir file event ; do
   echo "$dir/$file : $event le ${date} à ${time}"
done

Augmenter le nombre de fichiers scrutables via la variable max_user_watches

Si vous programmez inotifywait poru surveiller un dossier avec un grand nombre de fichiers, vous serez probablement confronté au message d'erreur suivant :

Please increase the amount of inotify watches allowed per user via `/proc/sys/fs/inotify/max_user_watches'.

Afin de remédier à ce problème il faut augmenter le nombre de fichiers que inotifywait est autorisé à scruter. Si par exemple on souhaite fixer la nouvelle limite à 52288

echo fs.inotify.max_user_watches=52288 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

 

Par Christophe HIRON
28 août 2019