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

Modules Perl Discussion :

XP et Win32::Internet font-ils bon ménage ?


Sujet :

Modules Perl

  1. #1
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut XP et Win32::Internet font-ils bon ménage ?
    Hello,

    là je craque complètement

    Sur une machine de prod' qui était autrefois sous Windows 2000, j'avais concocté un script Perl utilisant le module Win32::Internet pour rappatrier sur la machine des fichiers PDF stockés sur un serveur AIX via le réseau local de l'entreprise.

    Le programme fonctionnait parfaitement, je tiens à le préciser.

    Malheureusement, un crash d'un disque dur est survenu, la machine a été réparée et nous est revenue configurée avec Windows XP SP2.

    Et depuis, le programme déconne complètement. Voici le code partiel (j'ai éliminé ce qui n'a rien à faire ici pour + de lisibilité) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    # PRAGMAS
    use strict;
    use Win32::Internet;
     
    # PARAMS DE CONNEXION AIX
    my $hostin = "AIX_Prod";
    my $userin = "user";
    my $passin = "password";
    my $rep = "/DOC/stockage/PDF";
    my $I;
     
    # initialisation de la connexion FTP
    $I = new Win32::Internet();
    if (! $I->FTP($ftpin, $hostin, $userin, $passin))
    {
        my ($ErrNum, $ErrText) = $I->Error();
        die "Connection FTP impossible, erreur n° $ErrNum : $ErrText\n";
    }
    $ftpin->Binary();
     
    # @_ contient les noms des fichiers PDF à rappatrier sur la machine XP
    foreach my $fic(sort(@_))
    {
        if (! $ftpin->Get("$rep/$fic.PDF", "$fic.PDF"))
        {
            warn "$fic.PDF non récupéré dans $rep !\n";
        }
    }
    Le soucis, c'est que le programme peut trés bien être capable de récupérer 200 fichiers d'un coup pour lamentablement rester figé sur le 201è sans raison apparente. Ou encore, bloquer de la même manière après seulement 5 ou 6 fichiers récupérer. Voire encore, bloquer dès le premier fichier à récupérer.

    Je répète que le prog, tel que ci-dessus, fonctionnait parfaitement sur le poste à l'époque où Windows 2000 était installé.

    Alors depuis, j'ai fait plusieurs batteries de tests, la dernière en date ne montre aucun signe d'amélioration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    ... ... ...
     
    my $Err = 0;    # pour fermer puis rouvrir une connexion FTP si plantage
     
    # @_ contient les noms des fichiers PDF à rappatrier sur la machine XP
    foreach my $fic(sort(@_))
    {
        if ($Err)
        {
            $ftpin->Close();
            undef($ftpin);
     
            if (! $I->FTP($ftpin, $hostin, $userin, $passin))
            {
                my ($ErrNum, $ErrText) = $I->Error();
                die "Connection FTP impossible, erreur n° $ErrNum : $ErrText\n";
            }
            $ftpin->Binary();
            $Err = 0;
        }
     
        if (! $ftpin->Get("$rep/$fic.PDF", "$fic.PDF"))
        {
            warn "$fic.PDF non récupéré dans $rep !\n";
            ++$Err;
        }
    }
    Les symptômes restent les mêmes. J'ai même fait un undef sur $I, puis reséquence de $I = new Win32::Internet();, rien à faire.

    J'ai activé les journaux de sécurité XP et ai remarqué que le firewall faisait de l'écoute sur ce qui était en train d'entrer via la connexion FTP. Mais entre écoute et blocage, il y a une différence et elle est bien présente ici puisque le script parvient à télécharger plusieurs fichiers par lots pour s'arrêter bêtement sur l'un d'eux.

    En coupant le firewall XP, ça ne change absolument rien à l'histoire.

    Test effectué sur chaque PDF où le prog se vautre : j'arrive parfaitement à le récupérer via un client FTP, le fichier se copie bien et est parfaitement lisible via Acrobat Reader.

    JE SECHE !

    (Et accessoirement : JE HAIS XP !!)

  2. #2
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Et si tu rajoutes une temporisation d'une seconde entre chaque téléchargement, est-ce que ca arrange les choses ?

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  3. #3
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Et si tu utilises Net::FTP plutôt que Win32::Internet ?

    --
    Jedaï

  4. #4
    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
    ou à coup de rsync
    mais il te faudra cygwin sur toutes les machines (avec openssh, rsync)

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par MarneusCalgarXP
    Et si tu rajoutes une temporisation d'une seconde entre chaque téléchargement, est-ce que ca arrange les choses ?
    J'ai rajouté un sleep(1); après chaque récupération de fichier PDF et ai réussi à rappatrier 190 PDF (90 Mo) en une 10aine de minutes pour ensuite voir mon script se faire jeter (c'est la première fois !!) par un joli :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Reconnection FTP impossible, erreur n° 12031 : La connexion avec le 
    serveur a été réinitialisée
    Died at D:\PROGRAMME\ExtraitPDF_TEMPORAIRE.pl line 187.
    Jamais eu ce message habituellement

    Prog relancé depuis 10 minutes, ça a l'air de tenir mais bon...

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par Jedai
    Et si tu utilises Net::FTP plutôt que Win32::Internet ?

    --
    Jedaï
    J'ai plus l'impression que le soucis est lié à la machine en elle-même

    Lorsqu'on l'utilise après une certaine période où elle est complètement éteinte, c'est là où le prog fonctionne le mieux, ou le plus longtemps.

    C'est comme si à un moment, il y avait plein de processus lancés en simultané et qui ferait qu'au bout d'un certain temps, elle planterait. Mais je ne vois rien dans le gestionnaire des tâches.

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par djibril
    ou à coup de rsync
    mais il te faudra cygwin sur toutes les machines (avec openssh, rsync)
    Oulah !! Cygwin ? Je préfère oublier rapidement ton idée

    Chez nous, rien que pour leur demander d'installer Perl sur un poste, faut faire une demande d'achat alors que Perl est gratuit !! Et une fois qu'on a réussi à le leur faire comprendre, il faut impérativement les laisser venir l'installer sur le poste souhaité. Gros problème : ils sont pas fichus de savoir où le récupérer et on finit toujours par être derrière leur dos à leur communiquer l'url d'ActiveState

    Si je fais une demande d'install de Cygwin, je ne suis pas sorti de l'auberge !


  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    A priori, je croise les doigts mais le rajout du sleep(1) a l'air de faire son petit effet.

    Je mettrai le flag résolu demain si pas de plantage d'ici là (environ quelques dizaines de go de PDF à downloader).

  9. #9
    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
    Citation Envoyé par Arioch
    Oulah !! Cygwin ? Je préfère oublier rapidement ton idée

    Chez nous, rien que pour leur demander d'installer Perl sur un poste, faut faire une demande d'achat alors que Perl est gratuit !! Et une fois qu'on a réussi à le leur faire comprendre, il faut impérativement les laisser venir l'installer sur le poste souhaité. Gros problème : ils sont pas fichus de savoir où le récupérer et on finit toujours par être derrière leur dos à leur communiquer l'url d'ActiveState

    Si je fais une demande d'install de Cygwin, je ne suis pas sorti de l'auberge !


    Sinon si t'es pas à une minute pres, un sleep(2) serait peut etre mieux

  10. #10
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Citation Envoyé par Arioch
    J'ai rajouté un sleep(1); après chaque récupération de fichier PDF et ai réussi à rappatrier 190 PDF (90 Mo) en une 10aine de minutes pour ensuite voir mon script se faire jeter (c'est la première fois !!) par un joli :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Reconnection FTP impossible, erreur n° 12031 : La connexion avec le serveur a été réinitialisée
    Died at D:\PROGRAMME\ExtraitPDF_TEMPORAIRE.pl line 187.
    Jamais eu ce message habituellement

    Prog relancé depuis 10 minutes, ça a l'air de tenir mais bon...
    Hmmm, une petite idée me vient d'un seul coup : est-ce que le module ne lancerait pas, par hasard, sur plusieur threads, l'ensemble des téléchargements en une fois, et que, par conséquent, tu dépasserais la limite du nombre de connexions autorisées par la machine ?

    Ce serait le cas si la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ftpin->Get("$rep/$fic.PDF", "$fic.PDF")
    n'était pas synchrone...

    Ca expliquerait pourquoi l'ajout d'une temporisation dégèle un peu la situation, la plupart des fichiers étant probablement de petite taille etrécupérés dans un délai inférieur à 1 seconde ?

    Si c'est le cas, il faudrait réussir à lancer les téléchargements les uns après les autres et mettre une tempo entre chaque download !

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  11. #11
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par MarneusCalgarXP
    Hmmm, une petite idée me vient d'un seul coup : est-ce que le module ne lancerait pas, par hasard, sur plusieur threads, l'ensemble des téléchargements en une fois, et que, par conséquent, tu dépasserais la limite du nombre de connexions autorisées par la machine ?

    Ce serait le cas si la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ftpin->Get("$rep/$fic.PDF", "$fic.PDF")
    n'était pas synchrone...
    Je ne sais pas mais a priori, ça tient toujours : le script tourne et bosse. Et malgré le petit sleep d'1 seconde ajouté, ça n'empêche nullement des downloads de PDF dépassant les 50 Mo par tête de pipe.

    Mais si ça merdouille de nouveau, je passerai à 2 pour le sleep

    Purée, et dire que si ça se résolve, ce le sera par une sombre histoire se passant sous la ceinture (slip ? heu, sleep)

  12. #12
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Bon eh bien j'ai parlé trop vite

    J'arrive ce matin et hop, les dernières lignes du log :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    TOTO017747.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018355.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018357.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018358.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018359.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018360.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018361.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018364.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018365.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018366.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018367.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018369.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018370.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018371.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018374.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018377.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018378.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018379.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018381.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018382.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018383.PDF non récupéré dans /DOC/stockage/PDF ! 
    TOTO018387.PDF non récupéré dans /DOC/stockage/PDF ! 
    Reconnection FTP impossible, erreur n° 12031 : La connexion avec le 
    serveur a été réinitialisée
    Died at D:\PROGRAMME\ExtraitPDF_TEMPORAIRE.pl line 187.
    Je vais relancer le prog après avoir passé le sleep à 2 secondes pour voir, et puis aussi me pencher sur la propal de Jedai : Net::FTP

    C'est pénible

  13. #13
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Dernier ajout : 3 tentatives de reconnection FTP successives, avec pause de 60 secondes entre chaque + die après la 3ème si échec.

    La suite au prochain plantage

  14. #14
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Ah oui, j'ai oublié de préciser, il est souvent conseillé de réinitialiser la connexion FTP au bout d'un certain temps... Tu peux toujours réinitialiser la connexion tous les 50 fichiers !

    (avec une hash pour stocker les noms des fichiers déjà téléchargés afin d'éviter d'avoir des doublons)

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  15. #15
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par MarneusCalgarXP
    Ah oui, j'ai oublié de préciser, il est souvent conseillé de réinitialiser la connexion FTP au bout d'un certain temps... Tu peux toujours réinitialiser la connexion tous les 50 fichiers !
    En fait, le plantage peut survenir dès le premier ou second fichier en cours de récupération.

    Du coup, dans un script temporaire m'ayant servi pour mes tests, je ferme la connexion après chaque fichier traité, puis pause de 2 secondes avant d'en rouvrir une nouvelle.

    Le traitement s'est ralenti considérablement ainsi, mais a l'air de tenir le choc.

    Et pour mon soucis de déconnexion faisant planter mon prog, maintenant je tente 3 connexions successives avec pause de 60 sec entre chaque et je die( ) sur la 3è si elle a échoué comme les 2 précédentes.

  16. #16
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Flag résolu activé

    Pas de plantage depuis ce matin 9h et si ça marche pas nickel à 100 %, c'est nettement mieux qu'avant.

    pour vos interventions à tous !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DisplayTag] Tri et pagination ne font pas bon ménage
    Par tiboudchou dans le forum Taglibs
    Réponses: 4
    Dernier message: 31/03/2010, 12h22
  2. C++ et VB6 ne font pas bon ménage!
    Par Tuizi dans le forum C++
    Réponses: 6
    Dernier message: 18/07/2008, 10h03
  3. Le wifi et Club Internet ne font pas bon ménage!
    Par Ylias dans le forum La taverne du Club : Humour et divers
    Réponses: 5
    Dernier message: 20/08/2007, 10h30
  4. Réponses: 2
    Dernier message: 12/08/2007, 15h27
  5. Struts Layout et struts-logic font-ils bon ménage ?
    Par ahury dans le forum Struts 1
    Réponses: 1
    Dernier message: 14/06/2007, 12h41

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