web-dev-qa-db-fra.com

comment mettre un trigger sur un répertoire

J'ai un script qui analyse un répertoire et effectue une maintenance sur les fichiers qu'il contient. Un autre processus crée les fichiers dans le répertoire (10 à 30 fichiers par jour).

Le script est appelé via un travail journalier. Ce dont j'ai besoin, c'est de déclencher le script sur un événement (à chaque fois qu'un nouveau fichier est créé dans le répertoire). Je préfère cela plutôt que d’augmenter la fréquence du travail cron.

Comment puis je faire ça? y a-t-il une commande ou un programme à installer?

Merci d'avance pour votre aide.

25
albert green

inoticoming

inoticoming est un démon qui surveille un répertoire avec le framework inotify de Linux et déclenche des actions une fois que des fichiers portant des noms spécifiques y sont placés.

Par exemple, il peut être utilisé pour attendre les fichiers .changes téléchargés dans un répertoire et appeler reprepro pour les mettre dans votre référentiel.

incron

incron est un système "inotify cron". Cela fonctionne comme le cron habituel mais est piloté par des événements de système de fichiers plutôt que par des événements temporels. Ce paquet fournit deux programmes, un démon appelé "incrond" (analogue à crond) et un manipulateur de table "incrontab" (comme "crontab").

incron utilise le noyau Linux inotify syscalls.

à l'instar de cron, chaque utilisateur peut éditer ses propres tables d'incron.

23
Florian Diesch

Il existe également un petit programme appelé iWatch - voir le page de manuel (cette page est pour Ubuntu precise (12.04), elle contient des liens vers d’autres versions d’Ubuntu).

iWatch a la capacité de surveiller les dossiers de manière récursive (c.-à-d. les sous-dossiers également) et d'envoyer des courriels en réponse à des événements de fichier/répertoire.

4
drevicko

Un autre utilitaire intéressant à connaître est fileschanged( page de manuel ici ), qui peut surveiller les événements du système de fichiers sur les fichiers ou les répertoires sélectionnés, par exemple la commande suivante

fileschanged -s created -t1 $PWD

devrait surveiller le répertoire en cours pour les événements de création de fichier, en écrivant le nom du fichier créé sur stdoutavec un délai d'expiration de 1 seconde.

fileschangedpeut regarder les dossiers de manière récursive (comme iWatchcomme indiqué dans une autre réponse), contrairement à incronet inoticomingname__.

3
enzotib

la page de manuel inotify est située

si vous préférez les scripts python, vous pouvez utiliser pyinotify

2
Pascal