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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [KSH] [AIX] Terminaison innatendue de script

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[KSH] [AIX] Terminaison innatendue de script

n°2121152
rivalgro
Posté le 13-01-2012 à 11:34:09  profilanswer
 

Un script ksh sur AIX 5.3 se termine de temps en temps de manière subite et inattendue.
Le script lance un shell fils comme suit
 
Code :

Code :
  1. trap 'rm -f /tmp/res.log;exit 0' 2 3 4 15
  2. run_child.sh > /tmp/res.log 2>&1
  3. echo "run_child.sh is terminated"
  4. next instructions...
  5. rm -f /tmp/res.log


 
de temps en temps, l'echo et les next instructions ne sont pas exécutées.
en set -x, on peut voir que la dernière instruction exécutée est  
 

Code :
  1. + run_child.sh > /tmp/res.log 2>&1


 
pourtant en traçant run_child.sh, il semble aller au bout (j'ai mis un echo juste avant sa dernière instruction d'exit 0), et on peut voir le resultat de cet echo dans la trace...
Quelqu'un saurait ce qu'il peut se passer car je suis sec, j'ai fait le tour des possibilités...

mood
Publicité
Posté le 13-01-2012 à 11:34:09  profilanswer
 

n°2121389
Sve@r
Posté le 14-01-2012 à 20:54:57  profilanswer
 

rivalgro a écrit :

Un script ksh sur AIX 5.3 se termine de temps en temps de manière subite et inattendue.
Le script lance un shell fils comme suit
 
Code :

Code :
  1. trap 'rm -f /tmp/res.log;exit 0' 2 3 4 15
  2. run_child.sh > /tmp/res.log 2>&1
  3. echo "run_child.sh is terminated"
  4. next instructions...
  5. rm -f /tmp/res.log


 
de temps en temps, l'echo et les next instructions ne sont pas exécutées.
en set -x, on peut voir que la dernière instruction exécutée est  
 

Code :
  1. + run_child.sh > /tmp/res.log 2>&1



Salut
Tu dis que l'echo "run_child.sh is terminated" n'est pas exécuté. Mais le script s'est-il arrêté ou est-il toujours en cours ?
S'il est toujours en cours ça veut dire qu'il est toujours sur "run_child.sh".
S'il s'est arrêté peut-être est-ce parce qu'il est passé par l'exit du "trap"...
 

rivalgro a écrit :

Quelqu'un saurait ce qu'il peut se passer car je suis sec, j'ai fait le tour des possibilités...


Rajoute un echo dans le trap. Tu verras bien s'il passe par là...

n°2121451
raskt
Posté le 15-01-2012 à 16:13:45  profilanswer
 

^ je plussoie
Peut-être qu'avec truss tu peux voir si le script reçoit un signal ?

n°2121796
rivalgro
Posté le 17-01-2012 à 11:07:11  profilanswer
 

pas besoin de rajouter d'echo dans le trap, puisque dans le trap il y adéjà le rm qui n'est pas executé. Et le script n'est plus en execution, il y a terminaison du père et fils.
Comment pourrais je tracer sachant que c'est du mode agent (le script est lancé par un agent de supervision à intervalle régulier...
Un lancement de type script.sh | truss -p $$ > /tmp/truss.log 2>&1 ... ?

n°2121827
raskt
Posté le 17-01-2012 à 13:21:02  profilanswer
 

Salut
tu peux envisager de lancer le truss en tâche de fond, avec un sudo, avant l'exécution du sous-script .sh.
Déjà voir ce que le parent reçoit comme instruction de fin (sigkill ou un autre signal pouvant être attrapé)

n°2121898
rivalgro
Posté le 17-01-2012 à 18:00:13  profilanswer
 

je vais essayer ça ...

n°2122218
rivalgro
Posté le 19-01-2012 à 08:31:47  profilanswer
 

j'ai une trace truss lors d'un plantage...
Quelqu'un peut m'aider à analyser cela ?
 
Voilà les dernières ligne de la trace truss
 

Code :
  1. +4689  open("/var/opt/OV/tmp/txt_138274.tmp", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) = 3
  2. +4690  close(1)                                        = 0
  3. +4691  kfcntl(3, F_DUPFD, 0x00000001)                  = 1
  4. +4692  close(3)                                        = 0
  5. +4693  kfcntl(1, F_GETFL, 0x00000000)                  = 67108865
  6. +4694  kwrite(2, " 1 >   / v a r / o p t /".., 34)     = 34
  7. +4695  fstatx(15, 0x2FF20CF0, 76, 0)                   = 0
  8. +4696  kwrite(1, " T h u   J a n   1 9   0".., 114)    = 114
  9. +4697  close(1)                                        = 0
  10. +4698  kfcntl(15, F_DUPFD, 0x00000001)                 = 1
  11. +4699  close(15)                                       = 0
  12. +4700  kfcntl(1, F_SETFD, 0x00000000)                  = 0
  13. +4701  kwrite(2, " +   / v a r / o p t / O".., 72)     = 72
  14. +4702  kioctl(2, 22528, 0x00000000, 0x00000000)        Err#25 ENOTTY
  15. +4703  kfork()                                         = 268964
  16. +4704  _sigaction(20, 0x00000000, 0x2FF20E20)          = 0
  17. +4705  _sigaction(20, 0x2FF20E20, 0x2FF20E30)          = 0
  18. +4706  kwaitpid(0x2FF20E90, -1, 6, 0x00000000, 0x00000000) (sleeping...)
  19. +4707  kwaitpid(0x2FF20E90, -1, 6, 0x00000000, 0x00000000) Err#82 ERESTART
  20. +4708  *** process killed ***


 
couplée aux dernières lignes de la trace set -x

Code :
  1. + Sid=Oracle_ICHORF00_
  2. + date
  3. + echo Thu Jan 19 08:17:53 NFT 2012 : Execution de /var/opt/OV/bin/instrumentation/fij_launch_hpov_alert_inv.sh ICHORF00
  4. + 1> /var/opt/OV/tmp/txt_138274.tmp
  5. + /var/opt/OV/bin/instrumentation/fij_launch_hpov_alert_inv.sh ICHORF00
  6. + 1>> /var/opt/OV/tmp/txt_138274.tmp 2>& 1


 

n°2122247
rivalgro
Posté le 19-01-2012 à 10:32:16  profilanswer
 

en gros le process est killé au moment de la sortie du fils...  
comment savoir d'où vient cet ordre car il est clair qu'il ne vient pas du script...

n°2122365
raskt
Posté le 19-01-2012 à 17:06:26  profilanswer
 

J'ai l'impression qu'il y a un script externe qui envoie un SIGKILL au ksh parent.
 
Existe-t-il un paramètre définissant une durée maximale d'exécution par l'application qui lance le script (trap snmp, ordonnanceur, etc.) ?
Constates-tu une durée constante d'exécution avant que le tout soit killé ?

n°2122465
rivalgro
Posté le 20-01-2012 à 09:40:09  profilanswer
 

Il y a une fonction interne au script père qui gère un timeout avec SIGKILL au bout de 300 secondes, mais 1) j'ai vérifié qu'elle ne s'enclenchait pas, 2) le script ne dure quelques secondes avant de recevoir ce signal. J'ai l'impression que c'est au niveau système que cela se passe...  
la ligne juste avant le kill ne mettrait pas la puce à l'oreille ?
kwaitpid(0x2FF20E90, -1, 6, 0x00000000, 0x00000000) Err#82 ERESTART

mood
Publicité
Posté le 20-01-2012 à 09:40:09  profilanswer
 

n°2122534
raskt
Posté le 20-01-2012 à 11:02:37  profilanswer
 

Pour moi ça signifie que le shell attend le retour du fils (signal child) mais que cette attente est interrompue subitement (par le signal 9).
Le script père en question, est-il possible de le tracer ?

n°2122585
rivalgro
Posté le 20-01-2012 à 14:10:34  profilanswer
 

il est déjà tracé, cf la trace truss...
tu parles peu être du processus qui le lance ?

n°2122603
raskt
Posté le 20-01-2012 à 14:49:31  profilanswer
 

oui


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [KSH] [AIX] Terminaison innatendue de script

 

Sujets relatifs
Aide pour un script cashpopup avec script javascript
Script PHP sauvegardes tables d'une base de donnéesAucun script moteur de recherche PHP ne marche !!
script sh et command printProbleme d'écriture sur un script
AIDE script bash avec en sortie, arborescence navigableScript TELNET Unix vers Windows
Exécuter un script si presse EntréeScript PHP
Plus de sujets relatifs à : [KSH] [AIX] Terminaison innatendue de script


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