Présentation

incron (remplaçant de dnotify) est le diminutif de inotify crontab qui est le diminutif de chrono table qui signifie table de planification.

inotify est un mécanisme du noyau Linux qui fournit des notifications concernant le système de fichiers.

Ainsi, incron est un outil qui exécute des actions selon des événements du système de fichiers.

Il est composé de :

  • incrond : un démon (un service qui tourne en tâche de fond)
  • incrontab : configurer les actions en ligne de commande
  • /etc/incron.conf : le fichier de configuration principal
  • /etc/incron.d/ : répertoire contenant la définition de fichiers/de répertoires à monitorer
  • /etc/incron.{allow,deny} (optionnel) : fichier définissant les utilisateurs autorisés à utiliser l’outil

Fonctionnement : le fonctionnement est proche de cron :

  • le démon incrond scanne les fichiers /etc/incron.d/ pour savoir quoi faire en fonction des évènements du système

L'utilisation est proche de cron.

Gérer les autorisations de l'utilisation de incron

Si le fichier /etc/incron.allow existe, alors seuls les utilisateurs qui sont dans ce fichier ont le droit d'utiliser incron. Ainsi, il vous faut soit :

  • Effacer le fichier
    sudo rm -f /etc/incron.allow
  • Ajouter l'utilisateur courant (ou ceux voulus)
    echo $USER | sudo tee -a /etc/incron.allow

Configurer les dossiers et les actions à effectuer

Lancer incrontab pour assigner des actions en fonction des fichiers/dossiers paramétrés :

incrontab -e
Cet utilitaire modifie un fichier dont le chemin est /var/spool/incron/$USER

ou bien créer un fichier texte dans le dossier :

/etc/incron.d/

Le format de saisie de incrontab est :

<chemin_répertoire_ou_fichier> <type(s) d'événement(s) séparés par un virgule> <commande ou script à exécuter>

Exemple : /home/mon_user/download IN_CLOSE_WRITE /home/mon_user/mon_script_incron.sh

Règles importantes

  • Si votre dossier comporte des espaces, il faut mettre un antislash \ devant chacun d'entre eux. Les guillements ne marcheraient pas. Ex : Mon\ dossier\ avec\ espace au lieu de "Mon dossier avec espace"
  • Il est préférable d'utiliser un script plutot que de lancer directement des commandes. Effectivement, certaines commandes semblent ne pas marcher quand elles sont directement appelé dans le fichier alors qu'elles marchent quand elles sont appelées dans le script.
  • Le display n'est pas actif. Vous ne pouvez donc pas appeler de commande graphique tel que Zenity pour afficher des boites de dialogue (ou alors quelqu'un pourrait expliquer comment ?).

Une possibilité (à inclure dans le script exécuté par incron) : à adapter selon la session et l'utilisateur

sudo -u nom_utilisateur sh -c '\
   export DISPLAY=:0
   PID=$(pgrep gnome-session)
   [ ! -z "$PID" ] && dbus=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ | cut -d= -f2-)
   export DBUS_SESSION_BUS_ADDRESS=$dbus
   zenity --info --title "TEST INCRON" --text "test graphique incron."
 '

On peut ajouter

   -- "$@"

après la dernière simple quote ' pour récupérer les arguments passés au script et donc afficher qui a déclenché quoi

  • Si vous voulez appliquer plusieurs événements, il faut les séparer par une virgule et non insérer plusieurs lignes

Liste des types d'événements

type d'événement Signification
IN_ACCESS le fichier a été accédé (lecture)
IN_ATTRIB les métadonnées du fichier ont été modifiées (permissions, timestamp, attributs étendus, etc)
IN_CLOSE_WRITE fermeture d’un fichier avec écriture. On attend que le fichier soit clôturé, dans notre cas, que le téléchargement SOIT TERMINE avant de déclencher la commande ou le script
IN_CLOSE_NOWRITE fermeture d’un fichier sans écriture
IN_CREATE le fichier ou répertoire créé dans un répertoire surveillé. Attention : la commande est déclenchée lorsque le fichier est créé MAIS pas "terminé". Dans le cas d'un téléchargement qui dure 2 mn dans notre répertoire "download", la commande se déclencherait dès la création du fichier SANS ATTENDRE LA FIN DU TÉLÉCHARGEMENT. L’opération de déplacement échouerait.
IN_DELETE le fichier ou répertoire supprimé dans un répertoire surveillé
IN_DELETE_SELF le fichier ou répertoire surveillé est supprimé
IN_MODIFY le fichier ou répertoire a été modifié
IN_MOVE_SELF le fichier ou répertoire a été déplacé
IN_MOVED_FROM un fichier du répertoire surveillé à été déplacé
IN_MOVED_TO un fichier a été déplacé dans le répertoire surveillé
IN_ALL_EVENTS combinaison de tous ce qui précède
IN_MOVE équivalent à IN_MOVED_FROM ou IN_MOVED_TO
IN_CLOSE équivalent à IN_CLOSE_WRITE ou IN_CLOSE_NOWRITE

Pour utiliser contextuellement les fichiers/dossiers, des "Wildcard" sont disponibles :

Wildcard Signification
$# nom du fichier ou nom du dossier sur lequel l’événement est intervenu
$@ chemin complet (dossier) du fichier/répertoire surveillé
$% nom (textuel) de l’événement intervenu
$& numéro de l’événement intervenu
$$ le caractère dollar (“$”)

Prise en compte de la configuration en redemarrant le demon

sudo service incron restart

Merci infiniment pour ces 2 liens qui ont servi d'inspiration pour cette page :

  • incron.txt
  • Dernière modification: Le 14/07/2023, 12:01
  • par Benjamin Loison