2008-12-17 8 views
4

Nous avons une configuration de système ftp à surveiller/télécharger à partir de serveurs ftp distants qui ne sont pas sous notre contrôle. Le script se connecte au ftp distant, et saisit les noms de fichier des fichiers sur le serveur, nous vérifions ensuite si c'est quelque chose qui a déjà été téléchargé. S'il n'a pas été téléchargé, nous téléchargeons le fichier et l'ajoutons à la liste.Empêcher ftplib de télécharger un fichier en cours?

Nous avons récemment rencontré un problème, où quelqu'un du côté ftp distant copiera dans un fichier unique massif (> 1GB) puis le script se réveillera voir un nouveau fichier et commencera à télécharger le fichier en cours de copie

Quelle est la meilleure façon de vérifier cela? Je pensais saisir la taille du fichier en attendant quelques secondes en vérifiant à nouveau la taille du fichier et voir si elle a augmenté, si ce n'est pas le cas, nous le téléchargeons. Mais comme le temps nous préoccupe, nous ne pouvons pas attendre quelques secondes pour chaque ensemble de fichiers et voir si la taille du fichier a augmenté.

Quelle serait la meilleure façon de faire à ce sujet, actuellement tout se fait via pythons ftplib, comment pouvons-nous faire cela en dehors de l'utilisation de la méthode susmentionnée.

Encore une fois, permettez-moi de répéter ceci, nous avons 0 contrôle sur les sites FTP distants.

Merci.

Update1:

Je pensais que si j'ai essayé de le renommer ... puisque nous avons les autorisations sur le ftp, si le téléchargement de fichiers est en cours serait la commande de changement de nom l'échec?

Nous n'avons pas de vraies options ici ... n'est-ce pas?

UPDATE2: Eh bien, voici quelque chose d'intéressant, certains des ftps testés semblent allouer automatiquement l'espace une fois que le transfert commence.

E.g. Si je transfère un fichier de 200mb sur le serveur ftp. Alors que le transfert est actif si je me connecte au serveur FTP et que je fais une taille pendant le téléchargement. Il montre 200mb pour la taille. Même si le fichier est seulement à 10% complet.

Les autorisations semblent également être définies de manière aléatoire. Le serveur FTP fourni avec IIS définit les autorisations APRES la fin de la copie du fichier. Alors que certains des autres serveurs ftp plus anciens le définissent dès que vous envoyez le fichier.

: '(

Répondre

5

"Foutez les torpilles! Pleine vitesse à venir! "

Il suffit de télécharger le fichier. S'il s'agit d'un fichier volumineux, attendez la fin du téléchargement tant que votre scénario est terminé et continuez le téléchargement à partir du point où il s'est arrêté. Répétez jusqu'à ce qu'il n'y ait plus de choses à télécharger.

+0

Ce n'est pas une mauvaise façon du tout. J'aime ça. – UberJumper

0

Vous ne pouvez pas savoir quand la copie du système d'exploitation est fait, il pourrait ralentir ou attendre

Pour une certitude absolue, vous avez vraiment besoin de deux fichiers

  • ... le fichier massif.
  • Et un fichier déclencheur minuscule.

Ils peuvent jouer avec la massiv e fichier tout ce qu'ils veulent. Mais quand ils touchent le fichier de déclenchement, vous téléchargez les deux.


Si vous ne pouvez pas obtenir de déclencheur, vous devez équilibrer le temps requis pour interroger le temps requis pour le téléchargement.

Pour ce faire.

  1. Obtenez une liste. Vérifiez les horodatages.

  2. Vérifiez les tailles par rapport à la taille du fichier précédent. Si la taille n'est même pas proche, elle est en cours de copie. Attendez; boucle sur cette étape jusqu'à ce que la taille soit proche de la taille précédente.

  3. Pendant que vous n'êtes pas fait:

    a. Obtenez le fichier.

    b. Obtenez une liste à nouveau. Vérifiez la taille de la nouvelle liste, la liste précédente et votre fichier. S'ils sont d'accord: vous avez terminé. Si elles ne sont pas d'accord: le fichier a été modifié pendant le téléchargement; tu n'as pas fini.

0

Comme vous dites que vous avez 0 contrôle sur les serveurs et ne peut pas faire de vos clients affichent des fichiers de déclenchement comme suggéré par S. Lott, vous devez faire face à la solution imparfaite et la transmission de dossier incomplet des risques, peut-être en attente pendant un certain temps et comparez les tailles de fichiers avant et après. Vous pouvez essayer de renommer comme vous l'avez suggéré, mais comme vous avez 0 contrôle, vous ne pouvez pas être sûr que l'administrateur ftp-server (ou leur successeur) ne change pas de plates-formes ou de serveurs FTP ou restreint vos permissions.

Désolé.

0

Si vous traitez plusieurs fichiers, vous pouvez obtenir la liste de toutes les tailles en une fois, attendre dix secondes et voir lesquelles sont les mêmes. Celui qui est toujours le même devrait être sûr de télécharger.

Questions connexes