|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Développeur Web Inscription : avril 2011 Messages : 5 ![]() |
Bonjour tout le monde,
je suis entrain d'écrire un script bash et je rencontre un souci. J'ai besoin de déplacer des fichiers vidéos (donc assez volumineux) d'un dossier vers un autre. Ce script est exécuté par une tache cron régulièrement, toutes les heures ou toutes les 30 min. Jusque là pas de problème. Mais je voudrais savoir comment je peux vérifier si un fichier est fini d'être uploadé, pour ne pas le déplacer alors qu'il est incomplet. Quelqu'un aurait il une idée ? Merci d'avance. |
|
|
10
|
|
|
#2 | ||||
|
Membre Expert
![]() ![]() budget et contrôle de gestion Inscription : décembre 2006 Messages : 895 ![]() |
Salut,
Il y a une solution. Passer par incron. Cet utilitaire surveille un répertoire et lance un script en réponse à la création, suppression,... d'un fichier. Tu peux très simplement faire exécuter l'action à la création du fichier <mon_répertoire_a_créer>. Voici un exemple d'un script que j'ai fait pour sortir la somme md5 d'un fichier Code :
Code :
$# => nom du fichier déplacé (IN_MOVED_TO) ou créé (IN_CLOSE_WRITE) /home/<user>/md5 => répertoire à surveiller /home/<user>/scripts/incron_md5.sh => script à appeler pour exécuter une action Avantage de cette méthode c'est que tu peux utiliser le même répertoire pour des actions différentes. Par exemple : fichier.crea => création d'un répertoire fichier.supp => suppression d'un répertoire .... Il suffit d'intégrer quelques tests dans le script de surveillance et tu fais ce que tu veux. Apparemment, il semble que tu ne puisses avoir qu'un seul script par répertoire surveillé.
__________________
Winnt C'est en Linuxant qu'on devient .... geek ![]() Intel Core i5 750 / 8 Go ram / Hdd 2 To / NVIDIA GeForce GTS 250 1Go sous Gentoo. Dual core E6300 / 2Go ram / Hdd 1 To / Ati 9800XT sous Debian Testing. Atom N330 / 4Go ram / Hdd 5To / intel GMA 950 sous Debian Testing Ici un article de présentation de la distribution Gentoo http://winnt.developpez.com/tutoriel...tation-gentoo/ |
||||
|
|
10
|
|
|
#3 |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 538 ![]() |
tu peux aussi tout simplement regarder l'état d'utilisation du fichier car tant que le processus XXXX n'a pas fini de télécharger le fichier ce dernier est associé à l'utilisation du fichier et donc
Te retourne alors le n° du processus qui tient ce fichier ouvert. Si aucun processus n'est associé au fichier c'est qu'il est terminé de télécharger que ce soit parce qu'il est au bout, ou que la liaison avec le site d'origine soit rompue. et Bien sur là tu n'as pas besoin de MD5SUM mais c'est quand même bien pratique et souvent pertinent* d'utiliser la méthode indiquée par Winnt. * enfin à chaque fois que tu traites un échange important de fichier soit en taille soit que ce soit des fichiers importants qui ne doivent jamais être transmis corrompus, etc.... |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() ![]() budget et contrôle de gestion Inscription : décembre 2006 Messages : 895 ![]() |
Salut,
@frp31 Comme par exemple le téléchargement d'une iso afin de vérifier la somme md5
__________________
Winnt C'est en Linuxant qu'on devient .... geek ![]() Intel Core i5 750 / 8 Go ram / Hdd 2 To / NVIDIA GeForce GTS 250 1Go sous Gentoo. Dual core E6300 / 2Go ram / Hdd 1 To / Ati 9800XT sous Debian Testing. Atom N330 / 4Go ram / Hdd 5To / intel GMA 950 sous Debian Testing Ici un article de présentation de la distribution Gentoo http://winnt.developpez.com/tutoriel...tation-gentoo/ |
|
|
10
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 538 ![]() |
tout à fait.
Mais fuser permet de vérifier même un fichier dont on a pas le md5 ou dont on ignore la taille à l'avance. |
|
|
00
|
|
|
#6 | |
|
Membre Expert
![]() ![]() budget et contrôle de gestion Inscription : décembre 2006 Messages : 895 ![]() |
Salut,
Citation:
Toutefois, je préfère incron qui me semble moins complexe mais permet de gérer tout de même le déclenchement fin d'une action (sur accès, fermeture, création, suppression, modification, déplacement vers/de, ouverture). En bref, il suffit de bien penser son script en fonction de ce que l'on veut faire et on peut obtenir sans trop d'efforts (désolé d'être fainéant Par exemple, génération du md5 si le fichier est un .iso, déplacement des fichiers .jpg dans le répertoire image de home et copie dans le répertoire image de backup, etc... Et tout ceci avec une seule action de copie ou téléchargement d'un fichier (le plaisir d'être flemmard ).
__________________
Winnt C'est en Linuxant qu'on devient .... geek ![]() Intel Core i5 750 / 8 Go ram / Hdd 2 To / NVIDIA GeForce GTS 250 1Go sous Gentoo. Dual core E6300 / 2Go ram / Hdd 1 To / Ati 9800XT sous Debian Testing. Atom N330 / 4Go ram / Hdd 5To / intel GMA 950 sous Debian Testing Ici un article de présentation de la distribution Gentoo http://winnt.developpez.com/tutoriel...tation-gentoo/ |
|
|
|
10
|
|
|
#7 |
|
Invité régulier
![]() Développeur Web Inscription : avril 2011 Messages : 5 ![]() |
Bonjour tout le monde.
Merci pour vos réponses qui m'offrent de très bonnes pistes pour finir mon script. Je suis assez novice sur linux... et je ne connais pas encore tous les outils utiles. Je ne connaissais pas incron, mais je vais me pencher sur la question. Merci de votre aide. |
|
|
10
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 538 ![]() |
Un bon admin/ingé/exploitant système est par définition une féniasse, si tu arrives pas à glander au moins 1/2 journée par semaine c'est que tu fais mal ton boulot !! gnarf gniarg
![]()
|
|
|
00
|
|
|
#9 | ||||
|
Futur Membre du Club
![]() Inscription : septembre 2008 Messages : 37 ![]() |
Bonjour,
j'ai eu la même problématique que toi, mais moi c'était avec un transfert FTP dont je ne savais pas trop quand ça se finissait, par conséquent j'ai donc fait un petit script qui permet de surveiller le remplissage du filesystem/répertoire dans lequel le fichier était uploadé : Code :
Le principe est que j'ai simulé un upload de fichier dans un répertoire en créant un fichier de 100 Mo ==> dd if=/dev/zero of=lol bs=1024 count=102400 2> /dev/null & Je le lance en tâche de fond (le petit "&" ), pendant ce temps là le script va surveiller le remplissage du filesystem sur lequel est hébergé le répertoire cible d'une part et d'autre part suit la progression de l'upload du fichier et émet un message de fin de transfert quand c'est fait, cela ce fait avec la boucle while et le sleep. La détection du fin de transfert se fait par la surveillance du process correspondant au transfert (ici c'est la commande dd ==> ps -ef | grep "dd " | grep -v grep 1>/dev/null) Grâce au code retour de la commande (0 pour OK et 1 pour NOK), cela me permet de savoir si la commande est encore active ou non (il ne faut pas oublier de mettre le [ grep -v grep ] sinon le code retour sera toujours 0). Voilà un exemple de son utilisation : Code :
cela est possible grâce à cette commande "echo -e "\r\033[32m\033[31m$A Mo \033[32mont ete copies et il reste \033[31m$B Mo \033[32mde libre\033[0m \c" (retour charriot /r et suppression du saut de ligne /c) ATTENTION ! le echo -e ne marche qu'en bash, sinon le reste est transposable sur d'autres shells. Concernant ces balises ==> 033[32m\033[31, c'est pour mettre de la couleur afinque cela soit plus sympas à lire. C'est un petit script sans prétention, perfectible, pour ton cas il faudrait juste changer la commande dd par ce que tu lances pour ton transfert, et vérifier les sorties de df et ls. On pourrait aussi modifier les unité (Go en Mo ==>A=`echo "$A/1024" | bc`). |
||||
|
|
00
|
|
|
#10 | |
|
Membre habitué
![]() Étudiant Inscription : août 2011 Messages : 46 ![]() |
Citation:
Code :
(($(pgrep -c firefox))) && echo allumé || echo éteind
__________________
Carpe Diem |
|
|
|
00
|
|
|
#11 |
|
Futur Membre du Club
![]() Inscription : septembre 2008 Messages : 37 ![]() |
En effet levy59 on peut faire comme ça et certainement encore d'autres façons, c'est là l'intérêt d'optimiser un script
![]() Disons que la commande pgrep n'est pas forcément utilisé par tous |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com