Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#1 Le 11/06/2010, à 15:13

mimoun

Surveiller un dossier

Salut,
J'aimerais surveiller un dossier sur un serveur, et envoyer un mail quand un fichier est créé quelque part dans l'arborescence du dossier.
J'ai trouvé une solution grâce à inotify :

inotifywait -m -r --format '%w%f' -e create /dossier/a/surveiller | while read line; do echo le fichier suivant ete ajoute : $line | mail -s 'Ajout de fichier' adresse@mail.com; done &

Mais j'ai l'impression que cette solution est un peu "sale" : on ne contrôle pas le processus (on est obligé de killer le processus quand on veut arrêter la surveillance ou changer un paramètre), et je n'ai pas l'impression qu'on ait un moyen de savoir que ça fonctionne effectivement (par exemple, si le processus s'arrête pour une quelconque raison).

Est-ce que quelqu'un aurait une solution plus propre ?

Merci.

Hors ligne

#2 Le 11/06/2010, à 15:52

Totor

Re : Surveiller un dossier

Bonjour,

tu peux procéder ainsi :

pid=/tmp/$$.pid
touch ${pid}

echo "Fichier PID = ${pid}"

while [ -e ${pid} ];
do
line=$(inotifywait -m -r --format '%w%f' -e create /dossier/a/surveiller -e delete ${pid})

[ "${line}" != "${pid}" ] && mail -s 'Ajout de fichier' adresse@mail.com <<< ${line}
done

il te suffit alors de supprimer le fichier pid pour arrêter le process. Ce n'est qu'un début car tu peux très bien imaginer remplacer le fichier /tmp/$$.pid par un pipe. Auquel cas, tu peux l'utiliser comme un canal de communication et piloter ton process.

EDIT : j'ai fait ce script à l'arrache sans le tester (car je n'en ai pas les moyens matériels) mais le principe est là.

EDIT 2 : Oublie cette histoire de pipe. Je me suis avancé un peu vite. inotify ne détectera pas les modifications sur le fichier tant qu'il n'aura pas été lu. Et pour le lire il faut qu'inotify rende la main.
Certe, tu peux mettre une tempo sur inotify mais ensuite, s'il n'y a rien dans le pipe, sa lecture bloquera le process donc c'est pas jouable.

Dernière modification par Totor (Le 11/06/2010, à 16:03)


-- Lucid Lynx --

Hors ligne

#3 Le 11/06/2010, à 19:20

mimoun

Re : Surveiller un dossier

Merci. Je n'ai pas compris l'utilisation que tu fais du fichier de pid.
Notamment là :

[ "${line}" != "${pid}" ]

Tu peux expliquer stp ? je n'ai pas du tout compris la comparaison entre les deux.

Dernière modification par mimoun (Le 11/06/2010, à 19:20)

Hors ligne

#4 Le 14/06/2010, à 12:49

Nivlag

Re : Surveiller un dossier

je suis ds la même situation que toi mimoun. Je dois surveiller d'édition d'un dossier pour mettre à jour un autre dossier.

Sauf que je ne comprend rien au code de notre amis Totor. Si tu trouves une solution je ss intéressé big_smile

Hors ligne

#5 Le 14/06/2010, à 13:22

Totor

Re : Surveiller un dossier

#!/bin/bash

# définition du fichier pid ($$ étant la valeur du pid du process actuel)
pid=/tmp/$$.pid
# création du fichier
touch ${pid}

# on affiche le fichier pid
echo "Fichier PID = ${pid}"

# tant que le fichier pid existe (cela évite de killer le process)
while [ -e ${pid} ];
do
# inotify attend toute modification sur le dossier ou la suppression du fichier pid et retourne le fichier impacté
line=$(inotifywait -m -r --format '%w%f' -e create /dossier/a/surveiller -e delete ${pid})

# si le fichier impacté n'est pas le fichier pid alors on envoyé un mail
[ "${line}" != "${pid}" ] && mail -s 'Ajout de fichier' adresse@mail.com <<< ${line}
done

-- Lucid Lynx --

Hors ligne

#6 Le 14/06/2010, à 13:45

zapple

Re : Surveiller un dossier

On peut utiliser la commande find :

find /répertoire -mmin 1

qui va t'afficher un résultat non nul si des modifications ont été faite durant la dernière minute (option -mmin 1).

Tu peux te servir de cette commande dans un script. Pour le script, quelqu'un aura surement une idée sur le comment faire.

Hors ligne

#7 Le 14/06/2010, à 14:36

Nivlag

Re : Surveiller un dossier

mon script doit être activé lorsque l'édition d'un fichier du dossier survient. Ce de manière permanente (le dossier peut ne pas être touché pdt 6 mois).

C'est comme un script de surveillance d'un dossier de partage. De tel sorte dès que quelqu'un modifie son contenu, un mail est envoyé (pour suivre votre exemple)

(merci Totor pour les commentaires ds tn script wink )

Hors ligne

Haut de page ↑