Description
inotify
permet d’ajouter un “watch descriptor” sur un fichier et d’envoyer des notifications au système lorsqu’un événement affecte ce fichier. Pour rappel, dans le monde UNIX, un fichier peut représenter un simple fichier, mais aussi un répertoire, un périphérique, un lien, etc.
Les principaux événements qui peuvent être suivis sont :
IN_ACCESS
: le fichier est lu ;IN_MODIFY
: le fichier est modifié ;IN_ATTRIB
: les attributs du fichier sont modifiés ;IN_OPEN
: le fichier est ouvert ;IN_CLOSE_WRITE
: le fichier est fermé après avoir été ouvert en écriture ;IN_CLOSE_NOWRITE
: le fichier est fermé après avoir été ouvert en lecture ;IN_MOVED_FROM
/IN_MOVED_TO
: le fichier a été déplacé ou renommé ;IN_DELETE_SELF
: le fichier a été supprimé ;IN_DELETE
: un fichier a été supprimé dans le répertoire surveillé ;IN_CREATE
: un fichier a été créé dans le répertoire surveillé.
Incron
Pour installer incron
:
sudo apt-get install incron
Une fois l’installation terminée, vous devez ajouter les utilisateurs autorisés à utiliser incron
dans le fichier /etc/incron.allow
.
$ cat /etc/incron.allow
myuser
Utilisation
Ajoutez un fichier pour chaque tâche/répertoire à surveiller dans /etc/incron.d/
.
/mon/repertoire/a/surveiller IN_CLOSE_WRITE php task.php --file $@/$#
Note : incron
ne gère pas la récursivité.
inotify-tools
Installation
sudo apt-get install inotify-tools
Description
inotify-tools
offre un moyen d’appeler inotify
directement depuis la ligne de commande.
inotifywait
Cette commande permet d’attendre un événement avant de poursuivre une exécution. Par exemple, pour éviter d’exécuter une commande qui nécessite un fichier et de tomber en erreur :
inotifywait -e close_write /var/run/jboss.pid && supervision_jboss.sh
L’option -t
(timeout) permet de définir un délai d’attente en secondes, par exemple, pour sortir d’une erreur si un événement est trop long à arriver :
backup.sh & ; inotifywait -e close_write -t 10000 backup_report || killall backup.sh
inotifywatch
inotifywatch
génère un rapport d’activité lorsque des événements se produisent sur les répertoires que vous surveillez :
$ inotifywatch /var/cache/apt/archives &
[1] 18607
root@work:~# Establishing watches...
Finished establishing watches, now collecting statistics.
root@work:~# apt-get autoclean
root@work:~# kill %1
total access close_write close_nowrite open delete filename
1919 7 1 2 3 1906 /var/cache/apt/archives/
Par défaut, inotifywatch
s’arrête lorsqu’il reçoit un signal d’interruption. Une option de timeout (-t
) existe également pour l’arrêter après le nombre de secondes spécifié.
Surveiller les activités dans le répertoire d’un utilisateur pendant une minute :
$ inotifywatch -r /home/user/ -t 60
Establishing watches...
Finished establishing watches, now collecting statistics.
total access modify close_write close_nowrite open moved_from moved_to create filename
16 3 3 2 0 2 2 2 2 /home/user/.mozilla/firefox/e3lq4lm3.default/
13 11 0 0 1 1 0 0 0 /home/user/.cache/myapp/mycache/
Mettre en place un script de surveillance
Pour conclure, voici comment mettre en place un script de surveillance pour exécuter inotifywait
et envoyer la sortie à une commande. Par exemple, vous pouvez créer un fichier watch.sh
avec ce contenu :
#!/bin/bash
WATCH_PATH=/var/watch/dir/
PHP_BIN=/usr/bin/php
inotifywait -rme move,close_write,delete --format "%e %w%f" "$WATCH_PATH" | while read -r file; do
"$PHP_BIN" console cmd:opt "${file}"
done
Lancer le script en arrière-plan
chmod +x watch.sh
./watch.sh
[Ctrl+z]
bg
disown -h