Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/02/2011, 17h57   #1
Membre éprouvé
 
Avatar de ben.IT
 
Homme Benoît
Inscription : janvier 2009
Messages : 392
Détails du profil
Informations personnelles :
Nom : Homme Benoît
Âge : 24
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2009
Messages : 392
Points : 438
Points : 438
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 :
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 :
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 :
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
__________________
Meet the free software gang
ben.IT est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/02/2011, 18h56   #2
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Code :
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 ?
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 23/02/2011, 19h29   #3
Membre éprouvé
 
Avatar de ben.IT
 
Homme Benoît
Inscription : janvier 2009
Messages : 392
Détails du profil
Informations personnelles :
Nom : Homme Benoît
Âge : 24
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2009
Messages : 392
Points : 438
Points : 438
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
__________________
Meet the free software gang
ben.IT est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/02/2011, 08h54   #4
Membre éprouvé
 
Avatar de ben.IT
 
Homme Benoît
Inscription : janvier 2009
Messages : 392
Détails du profil
Informations personnelles :
Nom : Homme Benoît
Âge : 24
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2009
Messages : 392
Points : 438
Points : 438
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 :
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
__________________
Meet the free software gang
ben.IT est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/02/2011, 09h04   #5
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
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 :
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 -
$
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 24/02/2011, 09h09   #6
Membre éprouvé
 
Avatar de ben.IT
 
Homme Benoît
Inscription : janvier 2009
Messages : 392
Détails du profil
Informations personnelles :
Nom : Homme Benoît
Âge : 24
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2009
Messages : 392
Points : 438
Points : 438
Par défaut une sombre histoire de nom de variables ...

je viens de trouver mon erreur :
J'avais déclaré :
Code :
FOUND=$(qstat | grep -c "$JOBID")
et je faisais mon grep sur $JOB_ID :
Code :
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
__________________
Meet the free software gang
ben.IT est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h22.


 
 
 
 
Partenaires

Hébergement Web