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 :

Problème de relais brisé (pipe)


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Problème de relais brisé (pipe)
    Bonjour à tous,

    Voici un bon moment que je sèche sur un problème...
    Le principe de fonctionnement de mon script est le suivant:

    tail -f "monfichier" | perl "monscript"

    Mon script fonctionne très bien, mais le seul point noir est que mon script s'arrette régulièrement de fonctionner car le "tail -f" plante...

    Serait-il possible de faire en sorte de laisser mon script Perl tourner lorsque le "tail -f" a planté, et de relance un autre "tail -f" afin de réalimenter mon script?

    Au final, il s'agirait d' "échapper" l'erreur provenant du tail et d'en relancer un nouveau, pour que le plantage du tail n'impacte pas le fonctionnement de mon script?

    Quelqu'un aurait une idée?
    D'avance merci!
    Tom

  2. #2
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    Tu peux aussi ouvrir un (named) pipe directement dans ton script, ça t'évitera le recours à tail -f, non ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Merci pour ta réponse,

    Je viens de regarder un peu sur le net ce qu'est un named pipe, mais je t'avoue mal comprendre son fonctionnement.

    C'est une sorte de fichier temporaire mémoire, qui est rempli suivant la méthode FIFO, et dès qu'une ligne est lue, elle est supprimée?

    Le tail -f que je fais, est réalisé sur un fichier qui atteint les 60 Go en fin de journée. Cela ne pourrait pas poser de problèmes?

    Merci,
    Tom

  4. #4
    Membre confirmé Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 570
    Points
    570
    Par défaut
    En fait le tail -f fait office de named pipe, en ré-alimentant le pipe quand des données sont ajoutée au fichier.

    Un exemple tout bête. Tu crées un named pipe dans le répertoire courant:Tu fais tourner une boucle qui lit le tuyau sans fin et traite les lignes lors qu'il y en a.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/perl
    use strict; use warnings;
     
    my $pipename = shift || 'myfifo';
    while (1) {
        open my $pipe, "<", $pipename
            or die "Unable to open $pipename: $!\n";
        while (<$pipe>) {
            print "Here is something new: $_";
        }
        close $pipe;
    }
    Maintenat il ne te reste plus qu'à alimenter le tuyau d'une manière où d'une autre. Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "tiens, voilà du boudin"> myfifo

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup pour ton aide!

    Je m'en vais tester ça sur le champ!


  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Finalement, ayant peur que le mkfifo ne sature ma mémoire si mon script plantait, j'ai testé une solution à laquelle je n'avais pas pensé.

    J'ai rajouté dans le fichier /etc/inittab la ligne suivante:

    XX:2345:respawn:/bin/sh /home/monlogin/script/monscript.sh

    Cette ligne permet de relancer automatiquement le script en cas de plantage, et ca fonctionne!

    Merci quand même pour votre aide.
    Tom

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

Discussions similaires

  1. Error 32:relais brisé(pipe)
    Par Mozard Yao dans le forum Odoo (ex-OpenERP)
    Réponses: 0
    Dernier message: 10/02/2014, 18h22
  2. Problème avec les fonctions pipe et dup
    Par Bifurkk dans le forum C
    Réponses: 1
    Dernier message: 03/12/2011, 10h27
  3. [Exchange 2010] Problème de relais smtp
    Par e-m.guillaume dans le forum Exchange Server
    Réponses: 2
    Dernier message: 13/05/2010, 15h09
  4. GraceGTK : problème de gestion de "pipe"
    Par pvincent dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 03/03/2010, 14h16
  5. Problème : bloquage d'un pipe
    Par Nicaisse dans le forum POSIX
    Réponses: 10
    Dernier message: 24/07/2003, 11h06

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