IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

utilisation module sftp::recursive


Sujet :

Langage Perl

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut utilisation module sftp::recursive
    Bonjour,

    j'essaie d'utiliser le module sftp:: recursive pour recupérer un dossier contenant des sous répertoires et des fichiers sur un serveur distant. Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $dir= "/dwh/tmp/decrypt_20130619/pretupsvar/billFiles/";
    	my %cfg = (user=>$username, password=>$password);
    	my $sftp = Net::SFTP::Recursive->new($ipBetsiboka,%cfg);
    	 #$sftp->rget($dir,$localDirectory);
    cependant j'ai l'erreur suivante : Deep recursion on subroutine
    pourriez vous me dire ou se trouve le problème svp?

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Le message "deep recursion" n'est pas une erreur, mais seulement un warning. Cela veut dire que l'on atteint un niveau de récursion supérieur ou égal à 100, autrement dit, il y a sans doute dans ton module une fonction qui s'appelle elle-même plus de 100 fois pour explorer une arborescence de fichier. Ce n'est peut-être pas très grave si c'est un module correctement testé. Au pire, si le programme entre dans une récursion infinie, ça plantera quand le programme n'aura plus assez de mémoire. A tout hasard, fais le test quand il n'y a rien d'autre d'important qui tourne sur ta bécane, mais normalement, dans ce cas, c'est perl et son programme qui planteront, sans planter le système.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    merci pour ta réponse lolo78, je viens de refaire le teste en désactivant tous les autres processus "encombrants". Le programme finit par planter avec ce message Couldn't get handle: Bad message at supervision.pl line 755 (ligne correspondant au rget de sftp::recursive) avec une boucle infinie sur ce message. Je précise qu'il commence a télécharger le répertoire parent mais n'arrive pas a télécharger les sous-répertoires ni les fichiers de ceux-ci. Peu-être, une erreur dans mon code? Peux-tu me proposer un exemple de code stp?

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Utilisation module sftp::recursive
    Bonjour,
    après plus d'une semaine de recherche, je n'ai toujours pas de solution. il semblerait que plusieurs personnes aient rencontré le même problème avec la méthode rget de sftp::recursive, toujours pas de solution?(la méthode rput fonctionnant parfaitement). Peut-être un problème de test du module? Quelqu'un connait-il un module qui permet de transférer de manière sécuriser de "gros" dossiers entre 2 serveurs?

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    En regardant ce module, je m'aperçoit que ce bogue a été signalé sur le CPAN depuis 2007 sans réponse.
    Je suggère donc ne pas l'utiliser .

    Je te propose d'utiliser Net::FTP et de gérer toi même la récursion.

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    As-tu essayé Net::FTP::Recursive ?

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Utilisation module sftp::recursive
    En effet, j'ai utilisé dans un premier temps le module FTP::Recursive. Et mon code fonctionnait sans aucun soucis. Cependant mon encadreur m'a demandé de passer à un module plus sécurisé car les données manipulées sont sensibles, c'est pourquoi je me suis tourné vers le module SFTP::Recursive. Y'a t-il moyen avec un module comme NET::SFTP de télécharger des dossiers entiers (qui ont des sous-aborescences?.

  8. #8
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Pourquoi ne pas faire du rsync ? Tu seras peinard, c'est rapide et sécurisé.
    Tu peux lancer une commande rsync dans ton programme Perl.

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,
    Merci Djibrill pour ta réponse. Cependant, je n'ai pas eu l'occasion de la tester. L'admin système n'a pas encore rajouter la commande au serveur. Nous avons contourner le problème pour le moment en passant le serveur dans un firewall. J'attends toujours une validation de la DMI pour le rajout de la command Rsync . Je vous tiens informé

  10. #10
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    S'il s'agit bien du module Net::SFTP::Recursive, la correction apportée par Lee (https://rt.cpan.org/Ticket/Attachmen...3/Recursive.pm) semble valide. Tu peux la tester en l'archivant quelque part mais en respectant l'arborescence Net::SFTP::Recursive => Net/SFTP/Recursive.pm, par exemple ./FOO/Net/SFTP/Recursive.pm (où . est le répertoire où réside ton script principal) et en invoquant perl comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -I ./FOO monbeauscript.pl sesarguments...
    Pour mémoire, lorsque perl rencontre l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use Net::SFTP::Recursive ...;
    il va rechercher un fichier Net/SFTP/Recursive.pm à partir de chacune des entrées dans @INC, en s'arrêtant dès qu'il en a trouvé un; -I ./FOO fait passer ./FOO en tête de @INC, ce qui signifie que ce répertoire sera recherché avant les autres (notamment la version récupérée de CPAN), ce qui est le but recherché ici.

    On peut évidemment utiliser un path absolu pour ce répertoire.

    -----------

    Ceci dit, je te conseillerai, pour des raisons d'efficacité et de sécurité, d'utiliser Net::SFTP::Foreign (qui dispose des commandes rput et rget) plutôt que Net::SFTP et Net::SFTP::Recursive. C'est un poil plus délicat à déployer mais mieux supporté ( ) et beaucoup, beaucoup, beaucoup plus rapide, surtout pour le transfert d'arborescences complètes.

Discussions similaires

  1. Utilisation de sftp et wget en ssh
    Par marouene_ dans le forum Linux
    Réponses: 19
    Dernier message: 06/06/2011, 16h05
  2. utilisation module perl
    Par gentelmand dans le forum Modules
    Réponses: 7
    Dernier message: 15/10/2009, 10h22
  3. pbm utilisation module
    Par CodeurNé dans le forum Modules
    Réponses: 1
    Dernier message: 20/03/2008, 21h53
  4. Réponses: 7
    Dernier message: 29/11/2007, 00h50
  5. utilisation module Statistics::R
    Par croixdebois dans le forum Modules
    Réponses: 4
    Dernier message: 30/10/2006, 22h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo