Attendre fin création fichier

Fermé
sam - 19 avril 2010 à 17:28
 sam - 22 avril 2010 à 16:37
Bonjour,
je dipose d'unordonnanceur qui detecte la création d'un fichier. Cependant même si la création du fichier est tujours en cours de part sa taille asser volumineuse, l'ordonnanceur déplace le fichier en question avant qu'il termine.
Mon idée est de lancer un script dés la création du fichier, ce script doit attendre jusqu'à ce qu'il n'y est plus d'écriture au niveau du fichier. Comment faire avec un script korn shell?

Merci d'avance.
A voir également:

8 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
19 avril 2010 à 17:53
Salut,

Le fichier est créé comment ? Depuis où ? Qu'est-ce qui le crée ?
0
Salut jipicy,
cela fait un bout de temps :) mais je vois que tu es fidéle à tes principes et je te remercie d'avance pour ton aide.
Le fichier est soit crée par une application J2EE, soit reçu par un CFT. dans les deux cas, il faudrait que j'attend la fin du transfert ou la fin de création du fichier avant que je n'opère mes traitements.
L'ordonnanceur déclenche son traitement dés que le fichier est crée dans le répertoire x.

Merci d'avance.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
20 avril 2010 à 12:31
Re-

Tu devrais peut être voir du côté de la commande "lsof".

Une commande du genre :

/usr/sbin/lsof  /chemin/fichier_en_cours_de_téléchargement


renvoie le PID du processus qui a ouvert le fichier, et rien lorsque le fichier est fermé.
Donc, avec une simple boucle qui vérifie si le fichier est ouvert devrait faire l'affaire, enfin je pense... ;-))

PS. Y'a peut être mieux et plus simple
0
dubcek Messages postés 18752 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 3 octobre 2024 5 619
20 avril 2010 à 12:44
hello
créer le fichier ailleur et le déplacer dans le dossier x quand il est prêt
ou
créer le fichier sous un nom temporaire que l'ordonnanceur ne touchera pas (par ex .part comme Firefox) et le renommer à la fin
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
20 avril 2010 à 12:53
Salut,

Ben ça revient au même non ? La difficulté étant de connaitre le moment où le téléchargement est fini ;-\
0
dubcek Messages postés 18752 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 3 octobre 2024 5 619
20 avril 2010 à 13:00
L'ordonnanceur déclenche son traitement dés que le fichier est crée dans le répertoire x.
est ce que l'ordonnanceur est totalement (et aveuglement) automatique ou controlable ?
dans ton exemple, qui attend ?
0
Salut,
l'ordonanceur est limité par rapport à tout ce qui est événementiel. l'évenement est déclenché dés la création du fichier indépendamment de la fin de création du fichier ou non :)
Pour la réponse de dubeck, elle n'est pas faisable dans mon scénario.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
20 avril 2010 à 15:23
As-tu essayé avec lsof ?
0
non. Je vais voir ce que cela va donner.
Merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ça ne marche pas.
j'ai lancé une boucle indéfinie pour la création d'un fichier et en parrallèle j'ai testé avec "lsof /rep" rep : est le répertoire contenant le fichier ouvert/en cours d'écriture et cela ne me donne aucun résultat.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
20 avril 2010 à 15:56
Il faut le nom du fichier pour avoir un retour du PID qui a ouvert le fichier.
Sans le nom mais avec le répertoire il retourne (enfin chez moi sur un téléchargement avec "wget") le PID de bash et celui de wget :-\
0
Salut jipicy,
j'ai procéder come suit. en ligne de commande j'ai lancé une boucle indéfinie pour la création d'un fichier dans le répertoire x. avec une autre session j'ai exécuter un lsof sur le répertoire et il ne me retourne pas le pid du fichier en cours de création.
Je vais creuser d'avantage.
Bonne journée.
0
dubcek Messages postés 18752 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 3 octobre 2024 5 619
22 avril 2010 à 15:36
en surveillant le fichier pas le répertoire, ça fonctionne
$ 
$ for X in in $(seq 1 10) ; do date ;sleep 5;done >> /tmp/pipapou&
[1] 12066
$ 
$ lsof -l |grep pipapou
bash      12066     1000    1w      REG        8,1       60 343445 /tmp/pipapou
sleep     12071     1000    1w      REG        8,1       60 343445 /tmp/pipapou
...
$ lsof -l |grep pipapou
bash      12066     1000    1w      REG        8,1      330 343445 /tmp/pipapou
sleep     12238     1000    1w      REG        8,1      330 343445 /tmp/pipapou
$ lsof -l |grep pipapou
[1]+  Done                    for X in in $(seq 1 10);
do
    date; sleep 5;
done >> /tmp/pipapou
$ lsof -l |grep pipapou
$ lsof -l |grep pipapou
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
22 avril 2010 à 15:40
C'est ce que je lui avait souligné ici ;-\

Merci pour le retour et l'exemple toutefois ;-)
0
merci à vous tous :)
je vais le tester.
0