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 05/06/2007, 15h19   #1
Membre actif
 
Avatar de Fango
 
Inscription : décembre 2005
Messages : 197
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : décembre 2005
Messages : 197
Points : 178
Points : 178
Par défaut Boucle qui teste la valeur de retour d'une fonction et affiche un resultat

Bonjour a tous!

J'ai un script (qui fonctionne relativement bien ) de demarrage (dans /etc/init.d/). A la fin de ce script, il appelle dans une boucle une fonction (locale au script) qui controle le statut d'une application (si elle est lancee ou non) et affiche un rapport sur la console. Cette boucle s'arrete quand l'appli est lancee, en controlant la valeur de retour de la fonction.

L'amelioration souhaitee serait d'effacer le rapport precedent a chaque fois qu'un nouveau est affichee (pour plus de clarte).

J'ai bien sur essaye en rajoutant un appel a "clear" dans la boucle avant l'appel a la fonction de statut, mais cette fonction prend un certain temps (appel asynchrone a priori) et du coup, l'ecran de la console restait noir trop longtemps (le temps d'executer cette fonction) au lieu d'afficher le dernier rapport puis d'effacer quand le nouveau arrive.

J'ai essaye aussi avec watch au lieu de faire une boucle. Mais comment arreter le watch ?


J'espere avoir ete clair

Merci!
Fango est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 16h05   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 546
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 546
Points : 7 776
Points : 7 776
si tu veux un controle permanant d'evenement sur un log ou autre il faut le lancer dans l'inittab et pa comme un script de demarrage (bien sur en mode respawn) sans modifier le script originel sauf lui ajouter une ligne comme par exemple :
pour que ca check que toutes les 10secondes afin de ne pas saturer les ressources.
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 16h34   #3
Membre actif
 
Avatar de Fango
 
Inscription : décembre 2005
Messages : 197
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : décembre 2005
Messages : 197
Points : 178
Points : 178
Merci de ta reponse. J'ai deja une instruction "sleep" dans ma boucle :
Code :
1
2
3
4
5
while ([ ${run_status} -eq 0 ]) 
do
my_fonction_check_status
sleep 6
done
Le fait que ce soit un script de demarrage est independant. L'appel est justement la pour controler l'etat d'avancement (l'appli est assez grosse et demande bien environ 15 minutes pour demarrer, et passe par des etats intermediaires du style noir-marron-jaune-vert selon l'avancement). Le probleme (qui, je te l'accorde, n'est pas d'une importance capitale, mais je ne vois pas comment y arriver et je suis curieux) vient vraiment de l'affichage de ces etats.
Pour le moment, cette solution (la meme que tu m'as propose) fonctionne tres bien. C'est juste que les precedents etats sont toujours affiches et visibles.
J'espere avoir ete plus clair... encore merci de ton aide en tout cas.

PS : c'est quoi le mode respawn ? Ok, je file sur mon ami google
Fango est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2007, 11h37   #4
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
en utilisant les caractere de cariage return et de non changer de ligne de la fonction echo du shell, un exemple a lancer DEPUIS UN SCRIPT :
Code :
1
2
3
4
5
6
 
echo -e "bonjour\c"
sleep 2
echo -e "\r en cours\c"
sleep 2
echo -e "\r ok fin du lancement"
il n'y a pas de changement de ligne a chaque affichage mais recopie sur la ligne courante.
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2007, 11h52   #5
Membre actif
 
Avatar de Fango
 
Inscription : décembre 2005
Messages : 197
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : décembre 2005
Messages : 197
Points : 178
Points : 178
Merci pour cette solution, c'est super! Le seul probleme, c'est que cela suppose que le resultat tienne sur une ligne non?
Fango est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2007, 15h05   #6
Membre actif
 
Avatar de Fango
 
Inscription : décembre 2005
Messages : 197
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : décembre 2005
Messages : 197
Points : 178
Points : 178
Comment faire donc quand le resultat a afficher comprend plusieurs lignes ?

(je dois ecraser plusieurs lignes du coup, pas seulement la ligne courante...)
Fango est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h56.


 
 
 
 
Partenaires

Hébergement Web