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