Ce guide montre comment 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 fichier ou de répertoire se produisent (par exemple, une modification de fichier, des changements d'autorisations, etc.).
Ce document est fourni sans garantie d'aucune sorte ! Je n'émets aucune garantie que cela fonctionnera pour vous !
1 Installation d'Incron
Incron est disponible dans le dépôt etch-backports, nous devons donc ajouter la ligne suivante à /etc/apt/sources.list :
vi /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-clé ajouter -
... et courir
apt-obtenir la mise à jour
Le référentiel 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 Utiliser Incron
L'utilisation d'incron ressemble beaucoup à l'utilisation de cron. Vous avez la commande incrontab qui vous permet de lister (-l), de modifier (-e) et de supprimer (-r) les entrées incrontab. Pour en savoir plus, consultez
man incrontab
Vous y trouverez également la section suivante :
Si /etc/incron.allow existe, seuls les utilisateurs répertoriés ici peuvent utiliser incron. Sinon, si /etc/incron.deny existe, seuls les utilisateurs NON répertoriés ici peuvent utiliser incron. Si aucun de ces fichiers n'existe, tout le monde est autorisé à utiliser incron. (Remarque importante :ce comportement n'est pas sécurisé 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 n'est pas sûr car alors chaque utilisateur du système peut utiliser incrontab)...
rm -f /etc/incron.allow
... ou ajoutez root à ce fichier (recommandé) :
vi /etc/incron.allow
racine |
Avant de faire cela, vous obtiendrez des messages d'erreur comme celui-ci lorsque vous essayez d'utiliser incrontab :
server1 :~# incrontab -l
l'utilisateur 'root' n'est pas autorisé à utiliser incron
server1 :~#
Après ça marche :
server1 :~# incrontab -l
pas de table pour root
server1 :~#
Nous pouvons utiliser
incrontab -e
pour créer des emplois incron. Avant de faire cela, nous examinons
man 5 incrontab
car il explique le format des crontabs. Fondamentalement, le format est le suivant...
... où
IN_ACCESS Le fichier a été accédé (lu) (*)
IN_ATTRIB Métadonnées modifiées (autorisations, horodatages, attributs étendus, etc.) (*)
IN_CLOSE_WRITE Le fichier ouvert pour l'écriture a été fermé (*)
IN_CLOSE_NOWRITE Le fichier non ouvert pour l'é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 file Watch /répertoire a lui-même supprimé
IN_MODIFY Le fichier a été modifié (*)
IN_MOVE_SELF Le fichier surveillé Le fichier surveillé/le répertoire a lui-même été déplacé
IN_MOVED_FROM Le fichier a déplacé du répertoire de fichiers surveillés (*) vers IN_MOVED répertoire surveillé (*)
IN_OPEN Le 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 du répertoire, auquel cas le champ de nom dans les
données d'événement renvoyées identifie le nom du fichier dans le répertoire.
Le symbole IN_ALL_EVENTS est défini comme un masque binaire de tous les événements ci-dessus. Deux symboles de commodité supplémentaires 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 autres symboles suivants peuvent être spécifiés dans le masque :
IN_DONT_FOLLOW Ne déréférence pas le nom de chemin s'il est un lien symbolique
IN_ONESHOT Surveiller le nom de chemin pour un un seul événement
IN_ONLYDIR Seulement regarder le nom de chemin Seulement s'il est un répertoire
De plus, il existe un symbole qui n'apparaît pas dans le jeu de symboles inotify. C'est IN_NO_LOOP. Ce symbole désactive la surveillance des événements jusqu'à ce que l'événement en cours soit complètement géré (jusqu'à ce que son processus enfant se termine).
$$ signe dollar
[email protected] chemin du système de fichiers surveillé (voir ci-dessus)
$# nom de fichier lié à l'événement
$% drapeaux d'événement (textuellement)
$&indicateurs d'événement (numériques)
Si vous surveillez un répertoire, alors [email protected] contient le chemin du répertoire et $# le fichier qui a déclenché l'événement. Si vous regardez un fichier, alors [email protected] contient le chemin d'accès complet au fichier et $# est vide.
Si vous avez besoin des caractères génériques mais que vous n'êtes pas sûr de leur traduction, vous pouvez créer une tâche incron comme celle-ci :
/tmp/ IN_MODIFY echo "$$ [email protected] $# $% $&" |
Ensuite, vous créez ou modifiez un fichier dans le répertoire /tmp et jetez un œil à /var/log/syslog - ce journal indique 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. il s'est exécuté (c'est-à-dire que les caractères génériques sont remplacés par leurs valeurs réelles).
tail /var/log/syslog
...
21 août 17:26:50 server1 incrond[7111] :(racine) CMD (echo "$ /tmp huhu IN_CREATE 256")
Dans cet exemple, j'ai créé le fichier /tmp/huhu; comme vous le voyez, [email protected] 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 redémarrer |
C'est ça. À des fins de test, vous pouvez modifier votre configuration Apache et jeter un œil à /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 redémarrage
serveur1 :~#
Pour supprimer toutes les tâches incron de l'utilisateur actuel, exécutez
incrontab -r
server1 :~# incrontab -r
suppression de la table pour l'utilisateur 'root'
la table pour l'utilisateur 'root' a été supprimée avec succès
server1 :~#
3 liens
- incron :http://inotify.aiken.cz/?section=incron&page=about&lang=en