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 :

Script ne rend pas la main suite à l'exécution d'un binaire


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Par défaut Script ne rend pas la main suite à l'exécution d'un binaire
    Bonjour,

    Je viens vers vous car j'ai testé de nombreuses choses et je n'ai toujours pas réussi à m'en sortir...
    Mon problème est le suivant.
    J'utilise un script qui me sert à administrer une appli serveur.
    Ce script permet de lancer l'appli, de l'arrêter, de l'interroger (via un autre binaire), etc.
    Le soucis est au lancement... L'appli est bien lancée par le script, mais ce dernier ne rend pas la main ! Hors c'est en quelque sorte un script générique que j'adapte à plusieurs applis serveurs et c'est semble-t-il la première fois que ce problème survient.
    Le fonctionnement habituel est que l'appli est lancée puis le script se termine et rend la main.

    Voici la partie du code qui me sert à lancer l'appli :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    # je mets la variable au cas où ca puisse éclaircir le code
    use constant TOTO                        => BIN_PATH . 'toto';
     
            #
            #       Lancement du daemon
            #
            my @commandLine = (TOTO, '-param1', '-param2', convertPath($filePath), '-log', '+' . convertPath($logFile));
            system(@commandLine);

    Et ce que j'ai au prompt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    serveur1 <SYS_V> 89 TITI% TITI.pl start
    02/28 17:32 (toto) Switching debug log to +/pim/pam/toto/toto.log
    Et là çà se met en append, en gros le process est bien lancé, l'appli fonctionne correctement mais le script ne rend pas la main et il attend que l'appli soit arrêté (via un kill) pour rendre la main...

    Je ne m'y connais pas bien en PERL, d'ordre général je fais du copié/collé et quelques modifs par ci par là. Là j'ai testé plusieurs syntaxes, j'ai testé de forker et j'en passe.
    En fait je cherche juste à lancer l'appli en arrière-plan, pour que le script rende la main..

    Version du perl utilisé : This is perl, version 5.005_03 built for sun4-solaris
    Je suis sous environnement UNIX SunOS
    La version de perl ne peut pas être changée (contrainte professionnelle).

    Merci d'avance pour votre aide.
    S'il y a besoin de plus de renseignements je les mettrai.

    Amicalement,
    Sylvain

  2. #2
    Expert confirmé
    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
    Par défaut
    C'est sans doute parce que les autres commandes retournaient tout de suite : system() ne retourne pas tant que la commande n'a pas retourné.

    Pour faire simple utilise Proc::Daemon (disponible sur le Cpan) pour transformer ton processus Perl en Daemon avant de lancer la commande avec un exec().

    Un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #
    #       Lancement du daemon
    #
    use Proc::Daemon;
    Proc::Daemon::Init();
     
    my @commandLine = (TOTO, '-param1', '-param2', convertPath($filePath), '-log', '+' . convertPath($logFile));
    exec(@commandLine);
    Attention, il ne doit rien y avoir après.

    Même si tu ne peux pas installer de module, ça ne devrait pas particulièrement poser de problème, c'est du pur Perl.

    --
    Jedaï

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Attention, il ne doit rien y avoir après.
    Par ne rien y avoir après tu sous-entends dans le programme entier ?
    Car le script fait 1200 lignes et l'option start n'est qu'une minuscule partie du script malheureusement..
    J'ai déjà testé le exec() mais pas de cette façon je crois, je reteste demain et je reviens sur le forum avec le résultat
    Merci

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Par défaut
    Je pense que je vais être bloqué, çà ne fonctionne pas ; ) (j'entends par là que le phénomène perdure)
    Aucun moyen d'incorporé un "&" unix dans ma commande pour qu'il aille se mettre derrière ? Ca serait si simple..
    Merci pour ton aide en tout cas

  5. #5
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par ifriit Voir le message
    Je pense que je vais être bloqué, çà ne fonctionne pas ; ) (j'entends par là que le phénomène perdure)
    Ca signifie que le problème vient d'autre part (ou que tu n'as pas bien appliqué ce code), Proc::Daemon te détache du terminal, la commande devrait donc retourner immédiatement. Sans ton code, je ne peux pas t'en dire plus.

    --
    Jedaï

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Par défaut
    Le problème c'est que je ne peux pas appliquer ce module Donc j'utilise quand même exec() mais sans appeler le module. Ca fonctionne mais çà a le même effet que system() en gros..
    Et comme l'installation de perl ne peut être modifiée je dois trouver une autre solution... (du moins si elle existe).
    Au besoin je peux te fournir le code entier (par MP de préférence) et t'expliquer ce que je fais et ce que j'essaye de lancer si çà ne t'ennuie pas.
    Merci pour ton attention pour mon problème en tout cas

    (Ps : je ne pourrai envoyer le code qu'à partir de lundi par contre)

  7. #7
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par ifriit Voir le message
    Le problème c'est que je ne peux pas appliquer ce module
    Pourquoi ne peux-tu pas "appliquer" ce module ? C'est du pur Perl, tu peux le mettre dans un répertoire où tu as accès, mettre ce répertoire dans @INC et charger ce module, pas de problème !

    --
    Jedaï

Discussions similaires

  1. Script qui ne rend pas la main
    Par cyberlulu dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 15/08/2013, 13h36
  2. Réponses: 1
    Dernier message: 15/05/2007, 09h16
  3. le Timer ne me rend pas la main
    Par toxycyty dans le forum Windows
    Réponses: 10
    Dernier message: 08/11/2006, 16h54
  4. RMAN ne rend pas la main
    Par big1 dans le forum Recovery Manager
    Réponses: 3
    Dernier message: 29/08/2006, 20h18
  5. Script CMD qui ne rend pas la main
    Par ipeteivince dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 10/06/2005, 11h00

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