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

Shell et commandes GNU Discussion :

[bash]récupérer un code de retour


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    Par défaut [bash]récupérer un code de retour
    Bonjour

    J'ai développé sur bash v3.1.17 un script shell qui doit invoquer un certain programme:
    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
     
    processExist(){
            USER=$1
            shift
            JOB=$1
            ps -fu $USER|grep -v grep|grep blastall|grep -c $JOB
            RES=$?
            if [ $RES -eq 1 ]
            then
                    return 0
            else
                    return 1
            fi
    }
     
    ##################MAIN PART#######################
     
    RES=`echo $BLAST_CMD | tr -d \" | at now + \`at -l | wc -l\` min 2>> /dev/null`
    while processExist $USER $JOB
    do
            sleep `perl -e 'print int(rand(100))'`
    done
    echo "update Job set endTime=now(), returnedCode=$RES where idJob=$JOB" > $TMP$JOB.sql
    mysql -u $DBUSER -p$PASSWD -D BaseClearBLAST < $TMP$JOB.sql
    rm $TMP$JOB.sql
    Ce code fonctionne donc sur mon shell. Toutefois, sur le shell du serveur (v2.05), le processus que je lance semble tourner en boucle ininterrompue.
    Quelqu'un peut-il voir où je me suis planté ?
    Merci d'avance.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

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

  2. #2
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 889
    Par défaut
    Bon, finalement, j'ai résolu mon problème en simplifiant déjà mon script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    echo $BLAST_CMD | tr -d \" | at now + `at -l | wc -l` min 2>> /dev/null
    RES=$?
    while processExist $USER $JOB
    do
            sleep `perl -e 'print int(rand(100))'`
    done
    echo "update Job set endTime=now(), returnedCode=$RES where idJob=$JOB" > $TMP$JOB.sql
    mysql -u $DBUSER -p$PASSWD -D BaseClearBLAST < $TMP$JOB.sql
    rm $TMP$JOB.sql
    Et ce qui posait problème finalement, c'était mon appel via mon bean Java que j'ai réécrit ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void lauchBLAST() throws IOException, SQLException, ClassNotFoundException, InterruptedException, Exception{
            updateStartTime();
            final String[] shell_cmd = {BLAST_sh, user, "\"" + this.BLAST_cmd + "\"", this.workingRep.getAbsolutePath(), ""+this.jobID+""};
            Logger log = new Logger(tmp_dir+this.jobID+".log");
            log.write(shell_cmd);
            Process process = Runtime.getRuntime().exec(shell_cmd);
            process.waitFor();
            int code = process.exitValue();
            if(code!=0)
                throw new Exception("Exited with error "+code);
        }
    Si ça peut être utile

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

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

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

Discussions similaires

  1. Récupérer le code de retour d'un job Talend
    Par DevServlet dans le forum Exécution et industrialisation
    Réponses: 12
    Dernier message: 26/09/2011, 14h53
  2. Réponses: 7
    Dernier message: 13/03/2008, 13h03
  3. [Ruby] Récupérer le code de retour
    Par K20 dans le forum Ruby
    Réponses: 4
    Dernier message: 29/10/2007, 16h49
  4. [2.0]Récupérer un code retour d'un exe.
    Par MoscoBlade dans le forum Windows Forms
    Réponses: 2
    Dernier message: 23/04/2007, 16h50
  5. [commande DOS] Récupérer le code retour d'un programme
    Par bobunny dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 04/06/2004, 15h51

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