2009-07-31 13 views
4

J'ai une application qui interroge continuellement un dossier. Une fois qu'un fichier est ftp dans le dossier, l'application doit déplacer ce fichier vers un autre dossier pour le traitement.Vérifiez si ftp est complet ou non?

Ici, nous n'avons aucune option pour vérifier si ftp est complet ou non.

Une commande "lsof" est proposée dans les forums techniques. Il a obtenu une colonne de description de fichier qui donne l'état du fichier. Puisqu'il s'agit d'une commande bsd gratuite et non présente dans les anciennes versions de Linux, je souhaite clarifier l'utilisation de cette commande.

Pouvez-vous nous parler de votre expérience en matière de vérification de fichiers et y a-t-il d'autres solutions de rechange disponibles?

L'utilisation de cet utilitaire présente également un risque?

Appréciez votre aide à l'avance.

Merci, Mathew Liju

Répondre

4

Nous avons fait cela auparavant dans un certain nombre de façons différentes.

méthode:

Si vous pouvez contrôler le processus d'envoi des fichiers, faites envoyer le fichier lui-même suivi d'un fichier sentinelle. Par exemple, envoyez le vrai fichier "contracts.doc" suivi d'un octet "contracts.doc.sentinel".

Ensuite, faites en sorte que votre processus d'écoute surveille les fichiers Sentinel. Lorsque l'un d'eux est créé, vous devez traiter le fichier de données équivalent, puis supprimer les deux.

Tout fichier de données ayant plus d'un jour et ne contenant pas de fichier sentinel correspondant, élimine-le - il s'agit d'une transmission qui a échoué.

Méthode deux:

Gardez un oeil sur les fichiers eux-mêmes (en particulier la dernière date/heure de modification). Traitez uniquement les fichiers dont l'heure de modification est supérieure à N minutes dans le passé. Cela augmente la latence du traitement des fichiers mais vous pouvez généralement être certain que, si un fichier n'a pas été écrit en cinq minutes (par exemple), c'est fait.

Conclusion:

Ces deux méthodes ont été utilisées avec succès par nous dans le passé. Je préfère le premier mais nous avons dû utiliser le second une fois quand nous n'avions pas le droit de changer le processus d'envoi des fichiers.

L'avantage du premier est que vous sais le fichier est prêt lorsque le fichier sentinelle apparaît. Avec les deux lsof (je suppose que vous traitez les fichiers qui ne sont pas ouverts par un processus comme étant prêts pour le traitement) et les horodatages, il est possible que le FTP se soit écrasé au milieu et que vous traitiez un demi fichier.

+0

Merci Pax. Nous avons un problème similaire avec la première approche que l'entreprise ne veut pas changer le processus. J'ai décidé d'aller avec la deuxième approche. –

1

Il existe normalement trois approches pour ce type de problème.

  1. fournissant un fichier de signal de sorte que lorsque votre fichier est transféré, un fichier supplémentaire est envoyé pour marquer que le transfert est terminé
  2. ajouter une entrée dans un fichier journal dans ce répertoire pour indiquer un transfert est terminé (ce ne fonctionne vraiment que si vous avez un seul pair mettant à jour le répertoire, pour éviter les problèmes de concurrence)
  3. analyse du fichier pour déterminer l'exhaustivité. par exemple. le fichier commence-t-il par un champ de longueur ou est-il manifestement incomplet? par exemple. l'analyse d'un fichier XML incomplet entraînera une erreur d'analyse en raison de l'absence d'un élément final. Selon la taille et le format de votre fichier, cela peut être trivial ou prendre beaucoup de temps.

lsof serait peut-être une option, bien que vous ayez identifié votre problème de portabilité Linux. Si vous utilisez ceci, notez l'option -F, qui formate la sortie appropriée pour le traitement par d'autres programmes, plutôt que d'être lisible par l'homme.

EDIT: Pax a identifié une quatrième (!) Méthode que j'avais oubliée - en utilisant le fait que l'horodatage du fichier n'a pas été mis à jour depuis un certain temps.

+0

Merci Brian pour le commentaire. Mais l'analyse du fichier d'entrée est une tâche fastidieuse, car elle est formatée et les entreprises ne sont pas d'accord pour un changement de processus. –

0

Il existe une cinquième méthode. Vous pouvez également vérifier si la session FTP est toujours active. Cela fonctionnera si chaque pair possède son propre compte utilisateur ftp. Tant que l'utilisateur n'est pas déconnecté de FTP, supposez que les fichiers ne sont pas complets.

Questions connexes