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 :

qsub en script shell : FOUND=$(qstat | grep -c "$JOB_ID") erreur


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ben.IT
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 431
    Par défaut qsub en script shell : FOUND=$(qstat | grep -c "$JOB_ID") erreur
    salut à tous,
    j'utilise un script shell qui lance un programme en qsub.
    Pour forcer à attendre la fin de l'exécution du programme en qsub, je compte le nombre de lignes résultant de la commande qstat avec un grep -c dans une boucle et je fais dormir (sleep) mon script tant que le programme lancé en qstat n'est pas terminé, c'est à dire que le nombre de lignes n'est pas 0.
    voici le code :
    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
     
    #execution du script en qsub
    JOBID=`qsub -q $QUEUE -o /tmp/$NAME.out -e /tmp/$NAME.err $SCRIPTS/$NAME`
    echo "jobid : $JOBID "
    #pour forcer a attendre la fin de l execution de qstat 
    FOUND=$(qstat | grep -c "$JOB_ID") #count row with right job id
    sleep 5					#temporisation
    echo "found here : $FOUND"
    while [ $FOUND -ne 0 ] 	# when no more matching row, job is over
    do
    	sleep 3 			#go to bed for 3 seconds
    	echo -n '.'
    	#FOUND=`qstat -r | grep "$JOB_ID" | wc -l`
    	FOUND=$(qstat | grep -c "$JOB_ID")
    done
    echo "found value after : $FOUND"
     
    ###### Reprise du script ######
    mon problème est le suivant, la variable $FOUND a pour valeur : 4,5, ou 6 alors qu'elle devrait avoir pour valeur 1 uniquement, puisqu'il n'y a qu'un job soumis avec l'id indiqué en qsub . D'ailleurs, si je fais ceci directement dans le shell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while ( true ) do qstat | grep -c "monjobid.monserveur" ;  done;
    J'obtiens 1 puis 0 quand le job a fini de tourner, ce qui est normal .

    Comment expliquer cette différence ?

    merci d'avance,
    ben


    voici la trace :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    #pour forcer a attendre la fin de l execution de qstat avant de faire le chmod sinon erreur
    FOUND=`qstat | grep "$JOB_ID" | wc -l` #count row with right job id
    qstat | grep "$JOB_ID" | wc -l
    ++ qstat
    ++ wc -l
    ++ grep ''
    + FOUND=4
    sleep 5					#temporisation
    + sleep 5
    found here : 4
    echo "found here : $FOUND"
    + echo 'found here : 4'
    while [ $FOUND -ne 0 ] 	# when no more matching row, job is over
    do
    	sleep 3 			#go to bed for 3 seconds
    	echo -n '.'
    	#FOUND=`qstat -r | grep "$JOB_ID" | wc -l`
    	FOUND=$(qstat | grep -c "$JOB_ID")
    done
    + '[' 4 -ne 0 ']'
    + sleep 3
    .+ echo -n .
    qstat | grep -c "$JOB_ID"
    ++ qstat
    ++ grep -c ''
    + FOUND=4
    + '[' 4 -ne 0 ']'
    + sleep 3
    .+ echo -n .
    qstat | grep -c "$JOB_ID"
    ++ qstat
    ++ grep -c ''
    + FOUND=4
    + '[' 4 -ne 0 ']'
    + sleep 3
    .+ echo -n .
    qstat | grep -c "$JOB_ID"
    ++ qstat
    ++ grep -c ''
    + FOUND=4
    + '[' 4 -ne 0 ']'
    + sleep 3
    .+ echo -n .
    qstat | grep -c "$JOB_ID"
    ++ qstat
    ++ grep -c ''
    + FOUND=4
    + '[' 4 -ne 0 ']'
    + sleep 3
    .+ echo -n .
    qstat | grep -c "$JOB_ID"
    ++ qstat
    ++ grep -c ''
    + FOUND=4
    + '[' 4 -ne 0 ']'
    + sleep 3
    .+ echo -n .
    qstat | grep -c "$JOB_ID"
    ++ qstat
    ++ grep -c ''
    + FOUND=4
    + '[' 4 -ne 0 ']'
    + sleep 3
    .+ echo -n .
    qstat | grep -c "$JOB_ID"
    ++ qstat
    ++ grep -c ''
    + FOUND=4
    + '[' 4 -ne 0 ']'
    + sleep 3
    .+ echo -n .
    qstat | grep -c "$JOB_ID"
    ++ qstat
    ++ grep -c ''
    + FOUND=4
    + '[' 4 -ne 0 ']'
    + sleep 3
    .+ echo -n .
    qstat | grep -c "$JOB_ID"
    ++ qstat
    ++ grep -c ''
    + FOUND=4
    + '[' 4 -ne 0 ']'
    + sleep 3
    .+ echo -n .
    qstat | grep -c "$JOB_ID"
    ++ qstat
    ++ grep -c ''
    + FOUND=4
    + '[' 4 -ne 0 ']'
    + sleep 3
    .+ echo -n .
    qstat | grep -c "$JOB_ID"
    ++ qstat
    ++ grep -c ''
    + FOUND=4
    + '[' 4 -ne 0 ']'
    ETC

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    qstat | grep "$JOB_ID" | wc -l
    ++ qstat
    ++ wc -l
    ++ grep ''
    Apparemment ta variable "$JOB_ID" est vide, donc il en résulte que le "grep -c" renvoie une valeur autre issue de la commande "qstat"

    Que te renvoie la commande "qstat" seule ?

  3. #3
    Membre éclairé Avatar de ben.IT
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 431
    Par défaut
    Bonsoir zipe31,
    Il me semble avoir fait des print de $JOBID et que c'était bon, elle contient bien le bon id du job. Effectivement, il n'y a rien sur le log...
    Il faut que je revérifie ça

    J'ai testé qstat seule et elle me liste bien les job en cours...

    merci à toi
    ben

  4. #4
    Membre éclairé Avatar de ben.IT
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 431
    Par défaut nommer les variables comme il faut, c'est mieux ...
    Je viens de revérifier : ma variable $JOBID n'est pas vide :
    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
    + JOBID=81.mon_serveur
    jobid : 81.mon_serveur 
    + echo 'jobid : 81.mon_serveur '
    ++ qstat
    ++ grep -c ''
    + FOUND=4
    + sleep 5
    found here : 4
    + echo 'found here : 4'
    + '[' 4 -ne 0 ']'
    + sleep 3
    .
    + echo .
    ++ qstat
    ++ grep -c ''
    + FOUND=4
    si quelqu'un a une idée ...
    ben

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Re-

    Je persiste à penser que ta variable à défaut d'être vide, n'est pas prise en compte, d'où le "++ grep ''"

    Un petit test chez moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ A="getty";set -xv;ps -e | grep  "$A" | wc -l; set -
    + grep --color getty
    + wc -l
    + ps -e
    6
    + set -
    
    $ A="";set -xv;ps -e | grep  "$A" | wc -l; set -
    + grep --color ''
    + wc -l
    + ps -e
    88
    + set -
    $

  6. #6
    Membre éclairé Avatar de ben.IT
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 431
    Par défaut une sombre histoire de nom de variables ...
    je viens de trouver mon erreur :
    J'avais déclaré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FOUND=$(qstat | grep -c "$JOBID")
    et je faisais mon grep sur $JOB_ID :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    while [ $FOUND -ne 0 ] 	# when no more matching row, job is over
    do
    	sleep 3 			#go to bed for 3 seconds
    	echo  "."
    	FOUND=$(qstat | grep -c "$JOB_ID")
    	qstat
    	echo "-"
    done
    En mettant le même nom de variable partout ça va tout de suite mieux
    Merci à toi, Zipe31, tu m'as mis sur la voie !
    à bientôt,
    ben

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/11/2010, 14h26
  2. Script shell 2 test grep dans un if
    Par hoaivong dans le forum Linux
    Réponses: 4
    Dernier message: 13/11/2008, 20h46
  3. Exécution d'un script shell
    Par Manu0086 dans le forum Linux
    Réponses: 8
    Dernier message: 15/06/2004, 16h31
  4. Explication script shell
    Par crasho007 dans le forum Linux
    Réponses: 2
    Dernier message: 14/06/2004, 13h54
  5. Cron + terminal + script shell
    Par nicolas.pissard dans le forum Linux
    Réponses: 3
    Dernier message: 17/03/2004, 09h24

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