script qui se bloque au bout de quelque minute

script qui se bloque au bout de quelque minute - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 15-07-2016 à 23:00:06    

Bonjour,
j'ai créé un script. ce script est censé tourné à l'infini jusqu'au redémarrage du serveur. Mais le problème est qu'il ne tourne plus au bout de quelque minute, heure. c'est aléatoire. En fait quand je regarde les process, je me rend compte qu'une autre instance de mon script se créer après un temps aléatoire et quand cet instance se créer mon script arrête de fonctionner. Pouvez me dire pourquoi il y a une autre instance qui se créer alors que j'ai rien demandé ? j'ai essayer de créer un script qui fait une boucle à l'infini et qui écrit ce nombre dans un fichier et c'est pareil à un moment il arrête d’écrire car le processus est dupliqué. help pls

Reply

Marsh Posté le 15-07-2016 à 23:00:06   

Reply

Marsh Posté le 16-07-2016 à 09:11:30    

Et sinon, le script en lui-même, on peut le voir ?


---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
Reply

Marsh Posté le 16-07-2016 à 09:48:51    

comment sait tu qu il est  dupliqué ?  
comment ton script est il démarré ? (méthode)
comment fais tu un boucle infinie ?
 
faire une boucle infinie est conceptuellement une connerie.
si tu a besoin qu une action soit infinie tu fais un daemon-like avec to script
 
as tu au moins pense a regarder si il bloque pas parce qu il écrit sur un fs full ou un fichier déjà ouvert avec un fs qui bufflerise trop (ordre d ecriture)?
 

Reply

Marsh Posté le 16-07-2016 à 22:22:36    

Fork Bomb a écrit :

Et sinon, le script en lui-même, on peut le voir ?


 
voici mon script.
 
#!/bash/bin
 
while [ 1 ]  
 do
 hour=`date +%k`
 #if [ $hour -le 19 ] && [ $hour -ge 7 ]
 #then
 time=`date '+%Y-%m-%d,%H:%M:%S'`
 time2=`date '+%H:%M:%S'`
 status=`/usr2/oneshot/mtcl/role`
 
 if [ $status = "MAIN" ] || [ $status = "STAND-BY" ]    
 then
 
 jct=`sudo -u mtcl /usr2/oneshot/mtcl/tool trkvisu $numeroNoeud | grep "nbr_trunk_busy :  start = " |  cut -d " " -f16 | awk '{ sum += $1 } END { print sum }'`
 
 echo "$time,$jct" >> "/usr4/pmm/""MA$numeroNoeudBis""_his.csv"
 echo "$time2,$jct" >> "/usr4/pmm/""MA$numeroNoeudBis""_tr.csv"
 
 fi
 #fi
 sleep 2
 
 done

Reply

Marsh Posté le 16-07-2016 à 22:24:25    

francoisp31 a écrit :

comment sait tu qu il est  dupliqué ?  
comment ton script est il démarré ? (méthode)
comment fais tu un boucle infinie ?
 
faire une boucle infinie est conceptuellement une connerie.
si tu a besoin qu une action soit infinie tu fais un daemon-like avec to script
 
as tu au moins pense a regarder si il bloque pas parce qu il écrit sur un fs full ou un fichier déjà ouvert avec un fs qui bufflerise trop (ordre d ecriture)?
 


 
 
je sais que mon scritp est dupliqué (enfin je crois) car au moment ou mon script arrete d'écrire dans le fichier, quand je dans un ps -edf j'ai une autre instance de ce premier script.  
je le lance comme ceci : ./monscript

Reply

Marsh Posté le 17-07-2016 à 16:32:50    

au vu du script tu ne vois pas 2* ton script avec ps mais le shell et ton script (process parent/fils)
 
man ps
 
:hello:

Reply

Marsh Posté le 18-07-2016 à 13:45:23    

ouaip, ce serait pas mal d'avoir aussi une copie de la sortie de ps.
 
quelles peuvent être les valeurs de $status ?
de toutes façons, les variables doivent être entre guillemets !
 
le shebang n'est pas correct.
 
une boucle infinie c'est plutôt while true, même si while [ 1 ] fonctionne, c'est bizarre !

Reply

Marsh Posté le 18-07-2016 à 19:54:12    

la vraie syntaxe c est meme  
 
while : ; do ..... ; done
 
pour l interopérabilité
 
et ${variable}

Reply

Marsh Posté le 20-07-2016 à 18:20:36    

chelou le bangshe pour commencer


---------------
I'm too old for this shit.
Reply

Marsh Posté le 22-07-2016 à 14:17:50    

francoisp31 a écrit :

au vu du script tu ne vois pas 2* ton script avec ps mais le shell et ton script (process parent/fils)
 
man ps
 
:hello:


 
 
Quand je fais un "ps -edf | grep script.sh" je vois :
 
root     29162     1  0 Jul11 ?        00:00:05 /bin/bash ./script.sh
root     17984     29162  0 Jul11 ?        00:00:04 /bin/bash ./script.sh
 
Pourquoi j'en vois 2  a votre avis ?

Reply

Marsh Posté le 22-07-2016 à 14:17:50   

Reply

Marsh Posté le 22-07-2016 à 18:13:29    

1 pour bash un pour ton script
 
regardes biens les ppid le 29162 est le bash qui appelle ton script  
le 17984 est le precess fils
 
d ailleurs si tu utilises correctement ta bangshell c est totalement inutile  
 

#!/bin/bash


 

Reply

Marsh Posté le 23-07-2016 à 13:25:00    

Citation :

d ailleurs si tu utilises correctement ta bangshell

et que tu rends ton script exécutable

Citation :

c est totalement inutile  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed