Ce guide explique comment installer et utiliser incron sur un système Debian 8 (Jessie). 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.).
1 Prérequis
- Autorisations d'administrateur système (connexion root). Toutes les commandes de ce didacticiel doivent être exécutées en tant qu'utilisateur root sur le Shell.
- J'utiliserai l'éditeur "nano" pour éditer les fichiers. Vous pouvez remplacer nano par un éditeur de votre choix ou installer nano avec "apt-get install nano" s'il n'est pas installé sur votre serveur.
2 Installer Incron
Incron est disponible dans le dépôt Debian ; nous installons donc incron avec la commande apt suivante :
apt-get install incron
Le processus d'installation devrait être similaire à celui de cette capture d'écran.
3 Utiliser Incron
L'utilisation d'incron ressemble beaucoup à l'utilisation de cron. Vous disposez de 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é). Ouvrez le fichier /etc/incron.allow avec nano :
nano /etc/incron.allow
Et ajoutez la ligne suivante. Enregistrez ensuite le fichier.
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 ça marche :
server1:~# incrontab -l
no table for root
server1:~#
Nous pouvons utiliser la commande :
incrontab -e
Pour créer des tâches incron. Avant de faire cela, nous jetons un coup d'œil à la page de manuel incron :
man 5 incrontab
La page de manuel explique le format des crontabs. Fondamentalement, le format est le suivant...
<path> <mask> <command>
... où
IN_ACCESS File was accessed (read) (*)
IN_ATTRIB Metadata changed (permissions, timestamps, extended attributes, etc.) (*)
IN_CLOSE_WRITE File opened for writing was closed (*)
IN_CLOSE_NOWRITE File not opened for writing was closed (*)
IN_CREATE File/directory created in watched directory (*)
IN_DELETE File/directory deleted from watched directory (*)
IN_DELETE_SELF Watched file/directory was itself deleted
IN_MODIFY File was modified (*)
IN_MOVE_SELF Watched file/directory was itself moved
IN_MOVED_FROM File moved out of watched directory (*)
IN_MOVED_TO File moved into watched directory (*)
IN_OPEN File was opened (*)
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 Don't dereference pathname if it is a symbolic link
IN_ONESHOT Monitor pathname for only one event
IN_ONLYDIR Only watch pathname if it is a directory
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).
$$ dollar sign
[email protected] watched filesystem path (see above)
$# event-related file name
$% event flags (textually)
$& event flags (numerically)
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. Ouvrez l'incron incrontab :
incrontab -e
et ajoutez la ligne suivante :
/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
...
Sep 16 10:14:35 server1 incrond[1199]: (root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")
Sep 16 10:14:36 server1 incrond[1199]: (root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")
Sep 16 10:14:39 server1 incrond[1199]: (root) CMD (echo "$ /tmp hello.txt IN_MODIFY 2")
Sep 16 10:14:39 server1 incrond[1199]: (root) CMD (echo "$ /tmp .hello.txt.swp IN_MODIFY 2")
Dans cet exemple, j'ai édité le fichier /tmp/hello.txt; comme vous le voyez [email protected] se traduit par /tmp, $# par hello.txt , $% à IN_CREATE et $&à 256. J'ai utilisé un éditeur qui a créé un fichier .txt.swp temporaire qui se traduit par des lignes supplémentaires dans syslog.
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 /usr/sbin/service apache2 restart /etc/apache2/sites-available/ IN_MODIFY /usr/sbin/service apache2 restart
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.
REMARQUE :N'effectuez aucune action à partir d'une tâche incron dans un répertoire que vous surveillez pour éviter les boucles. Exemple : Lorsque vous surveillez le répertoire /tmp pour les modifications et que chaque modification déclenche un script qui écrit un fichier journal dans /tmp, cela provoquera une boucle et pourrait amener votre système à une charge élevée ou même le planter.
Pour lister toutes les tâches incron définies, vous pouvez exécuter :
incrontab -l
server1:~# incrontab -l
/etc/apache2/apache2.conf IN_MODIFY /usr/sbin/service apache2 restart
/etc/apache2/vhosts/ IN_MODIFY /usr/sbin/service apache2 restart
server1:~#
Pour supprimer toutes les tâches incron de l'utilisateur actuel, exécutez :
incrontab -r
server1:~# incrontab -r
removing table for user 'root'
table for user 'root' successfully removed
server1:~#
4 liens
- Debian http://www.debian.org
- incron :http://inotify.aiken.cz/?section=incron&page=about&lang=en