Bonjour à tous,
Avant de commencer, je préfère vous prévenir que c'est mon premier script bash, donc n'hésitez pas à me dire si vous voyez quelque chose qui est totalement à côté de la plaque...
Voici ma problématique: je souhaite monitorer un dossier et faire une action dès qu'un fichier d'un certain nom y est déposé.
J'ai cherché un peu et j'ai découvert l'outil inotifywait qui a l'air absolument génial. J'ai ensuite construit ce script, qui m'a l'air de très bien fonctionner, d'après les tests que j'ai fait:
Vous aurez probablement remarqué le kill. En fait, j'aimerais que ce script se termine au bout d'un certain temps. Mon but est de le lancer tous les jours, le matin en le mettant dans crontab, et faire en sorte qu'au bout d'un certain temps, il se termine tout seul (pour éviter les fuites de mémoire ou autres désagrément - je ne sais pas si c'est utile, mais j'aimerais quand même mettre ceci en place). J'ai trouvé la fonction timeout que j'ai utilisé dans la ligne de crontab, qui fonctionnait très bien avec mon environnement de test qui est sous OL7, mais pas sur mon environnement de prod sous OL6.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 #!/bin/bash # Repertoire a surveiller (si fichier mettre repertoire parent) WATCHDIR="/root/watch" DATETIME="`date +%Y-%m-%d` `date +%T%z`" # Ajout de la date DATE_FOR_FILENAME=`date +%Y%m%d` SCRIPT_LOG_DIR="/root/isitec/log/" SCRIPT_LOGFILE="${SCRIPT_LOG_DIR}isitec-${DATE_FOR_FILENAME}.log" { sleep 5m kill $$ } & while true do { inotifywait -m -r -e create "$WATCHDIR" --format "%f" | while read f >> "${SCRIPT_LOGFILE}" do echo $f # on verifie que le fichier commence par ZZZ if [[ $f = ZZZ.* ]]; then sleep 30 ls -rtlh $WATCHDIR/ZZZ.* >> "${SCRIPT_LOGFILE}" mv -v "$WATCHDIR/$f" "$WATCHDIR/ok$f" >> "${SCRIPT_LOGFILE}" fi done } done
C'est donc pour cela que j'ai mis cette fonction kill, mais rien n'y fait, mon script continue de fonctionner, même après les 5 minutes.
Je m'en remet donc à vous. Auriez-vous une méthode pour faire en sorte que cela fonctionne ? J'ai essayé plusieurs choses, en vain...
Merci d'avance pour votre aide
Partager