Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
977 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Script vs shell ... casse tête : )

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Script vs shell ... casse tête : )

n°1425719
Gnaag
Posté le 09-11-2018 à 12:29:22  profilanswer
 

Salut à tous,

 

souci super strange. J'avoue ne pas comprendre et appelle les experts du coin : ).
J'écris un script de test de performances réseau basé sur l'application dd.

 

En bas du document man dd on lit :

 

Sending a USR1 signal to a running ‘dd’ process makes it print I/O statistics to standard error and then resume copying.
              $ dd if=/dev/zero of=/dev/null& pid=$!
              $ kill -USR1 $pid; sleep 1;kill $pid

 


En essayant direct sur la ligne de commande (sans les sleep 1 et kill $pid) tout fonctionne : ça permet de récupérer l’état d’avancement du dd à chaque répétition de la deuxième ligne, sans tuer le process dd. Vous pouvez essayer vous même : )
Ca me serait super utile car permet d'observer après coup (en loggant dans un fichier) les variations de vitesse en fonction du temps.

 

MAIS, en tentant d’écrire le tout dans un .sh (avec une boucle qui kill -USR toutes les seconde afin de récupérer l’état d’avancement du dd une fois par seconde par exemple), ça ne fonctionne plus : « kill -USR1 $pid » termine pour de vrai le processus dd...

 

J'avoue ne pas bien maîtriser cette histoire de kill -USR, et ne capte pas pourquoi son effet diffère selon qu'on l’exécute dans un script ou dans un shell.

 

Merci de votre aide, bonne journée :) !


Message édité par Gnaag le 09-11-2018 à 12:32:26
mood
Publicité
Posté le 09-11-2018 à 12:29:22  profilanswer
 

n°1425720
rat de com​bat
attention rongeur méchant!
Posté le 09-11-2018 à 13:52:22  profilanswer
 

Je sais pas si ça t'aide mais dd a une option pour afficher l'avancement de la commande. Regarde le man-page.

n°1425722
goblin_rie​ur
ingé systemes unix
Posté le 09-11-2018 à 13:59:35  profilanswer
 

C'est pas comme ça qu'on utilise les signaux et traps avec le kill sur les signaux 30,10,16,31,12 & 17..
 
c'est donc normal que ça ne marche pas :)
 
ensuite tester des perfs réseaux sur un dd .. heu... non... clairement pas ... dd va faire des écriture ici en mémoire  dans ton cas ... donc ce process peut etre accelleré/ralenti par le host .... donc ça n'a pas de pertinence dans ce cas...  
 
 
pour utiliser les sigusr1 et sigusr2  il te faut définir une action sur un trap  
dans ton cas un kill -9 de ${pid}  
 
et ensuite lancer ton dd  depuis une fonction en arrière plan
 
et enfin un sleep 1 suivi de l'appel à la fonction qui call ton trap  


---------------
Collectionner les vieux serveurs c'est chouette mais c'est lourd et ça prend de la place ;)
n°1425723
Gnaag
Posté le 09-11-2018 à 15:20:06  profilanswer
 

rat de combat a écrit :

Je sais pas si ça t'aide mais dd a une option pour afficher l'avancement de la commande. Regarde le man-page.


 
disponible que sur certaines versions de dd (status progress), pas la mienne : )

n°1425725
Gnaag
Posté le 09-11-2018 à 15:23:51  profilanswer
 

goblin_rieur a écrit :

C'est pas comme ça qu'on utilise les signaux et traps avec le kill sur les signaux 30,10,16,31,12 & 17..

 

c'est donc normal que ça ne marche pas :)

 

ensuite tester des perfs réseaux sur un dd .. heu... non... clairement pas ... dd va faire des écriture ici en mémoire  dans ton cas ... donc ce process peut etre accelleré/ralenti par le host .... donc ça n'a pas de pertinence dans ce cas...  

 


pour utiliser les sigusr1 et sigusr2  il te faut définir une action sur un trap
dans ton cas un kill -9 de ${pid}

 

et ensuite lancer ton dd  depuis une fonction en arrière plan

 

et enfin un sleep 1 suivi de l'appel à la fonction qui call ton trap

 

J'ai utilisé un mauvais terme ''perfs réseau" volontairement pour simplifier ma question. Plus précisément c'est pour tester un nas, partie stockage et partie réseau en même temps. Pour simuler des écritures / lectures de stations sur ce stockage, des dizaines (voire centaines) en même temps, voir ce qu'il peut encaisser.  Montage nfs, utilisation de l'option direct io pour contourner les caches. Ca fonctionne mais je manque de stats dans le temps, d'où ma question !
Aussi, je n'ai pas bien compris ton explication, en tout cas je ne vois toujours pas comment scripter ça .
Enfin, je ne comprends pas pourquoi le comportement d'un script diffère du comportement shell : )


Message édité par Gnaag le 12-11-2018 à 12:46:34
n°1425727
Gnaag
Posté le 09-11-2018 à 15:33:56  profilanswer
 

rat de combat a écrit :

Je sais pas si ça t'aide mais dd a une option pour afficher l'avancement de la commande. Regarde le man-page.


 
Et plus ça va plus je me demande si c'est pas le plus simple ... Faut que je change la version de dd plusieurs dizaines de fois mais après ça marche nickel...

n°1425728
rat de com​bat
attention rongeur méchant!
Posté le 09-11-2018 à 15:37:06  profilanswer
 

goblin_rieur a écrit :

pour utiliser les sigusr1 et sigusr2  il te faut définir une action sur un trap etc

J'ai rien compris. :(  :o  
Tu peux donner un exemple plus complet stp (pour ma culture personnelle)?

n°1425737
goblin_rie​ur
ingé systemes unix
Posté le 09-11-2018 à 19:04:28  profilanswer
 

C'est plus facile avec un exemple qu'à expliquer :)  
 

Code :
  1. sigquit()
  2. {
  3.    echo "signal QUIT received"
  4. }
  5. sigint()
  6. {
  7.    echo "signal INT received, script ending"
  8.    exit 0
  9. }
  10. trap 'sigquit' QUIT
  11. trap 'sigint'  INT
  12. trap ':'       HUP      # ignore the specified signals
  13. echo "test script started. My PID is $$"
  14. while /usr/bin/true ; do
  15.   sleep 30
  16. done


 
 
la il faudrait mettre le dd <.....> dans une fonction
le kill dans

Code :
  1. killer()
  2. {
  3. kill -9 ${pid}
  4. exit 0
  5. }


genre  
 
trap 'kill' 30
 
et au bon moment choisi dans le script
 
kill -30 du pid déclanchera la fonction killer
 
idealement il faudrai se taper le

man 7 signal


Message édité par goblin_rieur le 09-11-2018 à 19:06:10

---------------
Collectionner les vieux serveurs c'est chouette mais c'est lourd et ça prend de la place ;)
n°1425787
rat de com​bat
attention rongeur méchant!
Posté le 11-11-2018 à 18:15:57  profilanswer
 

Intéressant... Si je comprends bien quand on démarre dd depuis un script c'est ce script (et non dd) qui récupère le signal USR1 et du coup il ne se passe rien?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Script vs shell ... casse tête : )

 

Sujets relatifs
AnnuléScript pour kill automatique les processus qui utilisent 60% du CPU
Script de redémararge WifiErreur! mon script ne marche pas lors du check config
Script Shell : eviter d'utiliser eval dans ce bout de script ?SCRIPT : Enregistrement piece jointe Thunderbird
[Code et Script][bash] test et argumentsslinuxjjhj
script montage lecteur réseau apres commande kinit 
Plus de sujets relatifs à : Script vs shell ... casse tête : )


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR