Ce guide montre comment vous pouvez installer et utiliser incron sur un système Debian Etch. Incron est similaire à cron, mais au lieu d’exécuter des commandes en fonction du temps, il peut déclencher des commandes lorsque des événements de fichiers ou de répertoires se produisent (par exemple, une modification de fichier, des changements de permissions, etc.).
Ce document est fourni sans garantie d’aucune sorte ! Je ne donne aucune garantie que cela fonctionnera pour vous !
1 Installation d’Incron
Incron est disponible dans le dépôt etch-backports, donc nous devons ajouter la ligne suivante à /etc/apt/sources.list :
| [...] deb http://www.backports.org/debian etch-backports main contrib non-free [...] |
Importons la clé d’archive backports.org dans apt…
wget -O - http://backports.org/debian/archive.key | apt-key add -
… et exécutons
Le dépôt etch-backports est inactif par défaut, donc pour installer incron à partir de celui-ci, nous devons utiliser la commande suivante :
apt-get -t etch-backports install incron
2 Utilisation d’Incron
L’utilisation d’incron est très similaire à l’utilisation de cron. Vous avez la commande incrontab qui vous permet de lister ( -l), d’éditer ( -e) et de supprimer ( -r) des entrées incrontab. Pour en savoir plus à ce sujet, consultez
Là, vous trouverez également la section suivante :
Si /etc/incron.allow existe, seuls les utilisateurs listés ici peuvent utiliser incron. Sinon, si /etc/incron.deny existe, seuls les utilisateurs NON listés ici peuvent utiliser incron. Si aucun de ces fichiers n’existe, tout le monde est autorisé à utiliser incron. (Note importante : Ce comportement est peu sûr et sera probablement modifié pour être compatible avec le style utilisé par ISC Cron.) L’emplacement de ces fichiers peut être modifié dans la configuration.
Cela signifie que si nous voulons utiliser incrontab en tant que root, nous devons soit supprimer /etc/incron.allow (ce qui est dangereux car alors chaque utilisateur système peut utiliser incrontab)…
… ou ajouter root à ce fichier (recommandé) :
| root |
Avant de faire cela, vous obtiendrez des messages d’erreur comme celui-ci lorsque vous essayez d’utiliser incrontab :
server1:~# incrontab -l
user 'root' is not allowed to use incron
server1:~#
Après cela, cela fonctionne :
server1:~# incrontab -l
no table for root
server1:~#
Nous pouvons utiliser
pour créer des tâches incron. Avant de faire cela, nous jetons un œil à
car cela explique le format des crontabs. Fondamentalement, le format est le suivant…
…où peut être un répertoire (ce qui signifie que le répertoire et/ou les fichiers directement dans ce répertoire (pas les fichiers dans les sous-répertoires de ce répertoire !) sont surveillés) ou un fichier.
peut être l'un des suivants :
```
IN_ACCESS Fichier a été accédé (lu) (*)
IN_ATTRIB Métadonnées changées (permissions, horodatages, attributs étendus, etc.) (*)
IN_CLOSE_WRITE Fichier ouvert pour écriture a été fermé (*)
IN_CLOSE_NOWRITE Fichier non ouvert pour écriture a été fermé (*)
IN_CREATE Fichier/répertoire créé dans le répertoire surveillé (*)
IN_DELETE Fichier/répertoire supprimé du répertoire surveillé (*)
IN_DELETE_SELF Fichier/répertoire surveillé a été lui-même supprimé
IN_MODIFY Fichier a été modifié (*)
IN_MOVE_SELF Fichier/répertoire surveillé a été lui-même déplacé
IN_MOVED_FROM Fichier déplacé hors du répertoire surveillé (*)
IN_MOVED_TO Fichier déplacé dans le répertoire surveillé (*)
IN_OPEN Fichier a été ouvert (*)
```
Lors de la surveillance d'un répertoire, les événements marqués d'un astérisque (*) ci-dessus peuvent se produire pour les fichiers dans le répertoire, auquel cas le champ de nom dans les données d'événement retournées identifie le nom du fichier dans le répertoire.
Le symbole IN_ALL_EVENTS est défini comme un masque de bits de tous les événements ci-dessus. Deux symboles supplémentaires de commodité sont IN_MOVE, qui est une combinaison de IN_MOVED_FROM et IN_MOVED_TO, et IN_CLOSE qui combine IN_CLOSE_WRITE et IN_CLOSE_NOWRITE.
Les symboles suivants peuvent également être spécifiés dans le masque :
```
IN_DONT_FOLLOW Ne pas suivre le chemin d'accès s'il s'agit d'un lien symbolique
IN_ONESHOT Surveiller le chemin d'accès pour un seul événement
IN_ONLYDIR Ne surveiller le chemin d'accès que s'il s'agit d'un répertoire
```
De plus, il existe un symbole qui n'apparaît pas dans l'ensemble de symboles inotify. C'est IN_NO_LOOP. Ce symbole désactive la surveillance des événements jusqu'à ce que le courant soit complètement traité (jusqu'à ce que son processus enfant se termine).
est la commande qui doit être exécutée lorsque l'événement se produit. Les jokers suivants peuvent être utilisés dans la spécification de commande :
```
$$ signe dollar
$@ chemin du système de fichiers surveillé (voir ci-dessus)
$# nom de fichier lié à l'événement
$% drapeaux d'événement (textuellement)
$& drapeaux d'événement (numériquement)
```
Si vous surveillez un répertoire, alors $@ contient le chemin du répertoire et $# le fichier qui a déclenché l'événement. Si vous surveillez un fichier, alors $@ contient le chemin complet vers le fichier et $# est vide.
Si vous avez besoin des jokers mais n'êtes pas sûr de ce qu'ils traduisent, vous pouvez créer une tâche incron comme ceci :
| ```
/tmp/ IN_MODIFY echo "$ $@ $# $% $&"
``` |
Ensuite, vous créez ou modifiez un fichier dans le répertoire /tmp et regardez /var/log/syslog - ce journal montre quand une tâche incron a été déclenchée, si elle a réussi ou s'il y a eu des erreurs, et quelle était la commande réelle qu'elle a exécutée (c'est-à-dire que les jokers sont remplacés par leurs valeurs réelles).
```
tail /var/log/syslog
```
```
...
Aug 21 17:26:50 server1 incrond[7111]: (root) CMD (echo "$ /tmp huhu IN_CREATE 256")
```
Dans cet exemple, j'ai créé le fichier /tmp/huhu ; comme vous le voyez, $@ se traduit par /tmp, $# par huhu, $% par IN_CREATE, et $& par 256.
Maintenant, assez de théorie. Créons nos premières tâches incron. J'aimerais surveiller le fichier /etc/apache2/apache2.conf et le répertoire /etc/apache2/vhosts/, et chaque fois qu'il y a des changements, je veux qu'incron redémarre Apache. Voici comment nous procédons :
```
incrontab -e
```
| ```
/etc/apache2/apache2.conf IN_MODIFY /etc/init.d/apache2 restart
/etc/apache2/vhosts/ IN_MODIFY /etc/init.d/apache2 restart
``` |
C'est tout. Pour des tests, vous pouvez modifier votre configuration Apache et regarder /var/log/syslog, et vous devriez voir qu'incron redémarre Apache.
Pour lister toutes les tâches incron définies, vous pouvez exécuter
```
incrontab -l
```
```
server1:~# incrontab -l
/etc/apache2/apache2.conf IN_MODIFY /etc/init.d/apache2 restart
/etc/apache2/vhosts/ IN_MODIFY /etc/init.d/apache2 restart
server1:~#
```
Pour supprimer toutes les tâches incron de l'utilisateur actuel, exécutez
```
incrontab -r
```
```
server1:~# incrontab -r
supprimant la table pour l'utilisateur 'root'
table pour l'utilisateur 'root' supprimée avec succès
server1:~#
```
### 3 Liens
- incron: http://inotify.aiken.cz/?section=incron&page=about&lang=en