Bonjour,
J'ai un traitement qui attend un fichier dans un répertoire donné. Ce fichier est déposé de l'extérieur par un transfert FTP qui peut durer plusieurs dizaines de minutes.
Malheureusement, mon traitement prend en compte le fichier dès qu'il apparait sur le disque, sans attendre qu'il soit complet, ce qui occasionne la perte des derniers enregistrements. Pour éviter ce problème, il faudrait bien sur ne commencer le traitement qu'une fois la réception terminée.
Je précise que les solutions simples telles qu'envoyer la taille du fichier, ajouter une ligne de fin de fichier ou envoyer un fichier marqueur après le transfert ont toutes été refusées par notre fournisseur de données, qui ne souhaite pas modifier ses traitements.
Comment donc puis-je identifier qu'un fichier n'est plus en cours de mise à jour ?
Le traitement actuel est basé sur une boucle de ce type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 while ! [ -f fichier ] && condition_extérieure do sleep 60 done if [ -f fichier ] then # Commencer le traitement fi
Partager