Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/06/2013, à 15:14

d0ctrine

Effet de chargement dans les scripts [Résolu]

Bonjour à tous,

dans le cadre d'un stage on m'a demandé de réaliser un script permettant l'installation complète d'une application à base de sauvegarde. Mon script fonctionne pas de soucis la dessus, par contre j'aurais aimer durant certain temps de latence, notamment la réinjection de mon dump SQL dans la nouvelle base, ou la copie des fichier  produire un effet de chargement.

Par exemple durant la copie afficher le message : " Copie en cours " avec des points qui apparaissent, ou juste 3 points qui apparaissent l'un après l'autre et s'efface arrivé au troisième, et recommence etc...

Je pense faire une boucle avec l'affichage de point, mais comment vérifier que le script a terminé sa tâche ?
J'ai fait des recherches et je n'est rien trouvé sur le forum, j'ai aussi demandé a google, je n'ai rien obtenu.

Merci d'avance.

d0ctrine.

PS : Désolé si j'ai laissé trainer quelque faute, et mon script est en /bin/bash.

Dernière modification par d0ctrine (Le 06/06/2013, à 10:02)

Hors ligne

#2 Le 05/06/2013, à 17:09

nesthib

Re : Effet de chargement dans les scripts [Résolu]

Peux-tu poster ton script et détailler quelle partie doit avoir le suivi ?

Le point principal est ce déterminer l'avancement, et ça va dépendre de ce que fait le script. Nombre de requêtes effectuées/totales ; taille du fichier transférée/taille totale…
Ce que tu cherches à faire n'est pas toujours simple/efficace et c'est aussi pour ça que de nombreux utilitaires (comme cp) ne possèdent pas cette fonction par défaut.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#3 Le 05/06/2013, à 17:49

Zakhar

Re : Effet de chargement dans les scripts [Résolu]

Oui, parce que si l'utilitaire n'a pas ça d'intégré, comme par exemple (liste non exhaustive)
- wget
- curl
- rsync
- ...

Eh bien ton script va devoir le faire lui-même !
Si en plus tu lances (ce que je comprends) une tâche qui "prend un certain temps" (comme un load dans une base) mais ne rend la main au script que quand elle a fini... ben là ça te complique la tâche puisque ton script n'a pas la main pour afficher la jauge de progression.
Tu es donc obligé d'en passer par :
- lancer un shell "fils"
- monitorer l'avancement du "fils" (par exemple en exploitant un fichier de sortie de la tâche en cours dans le fils)

... bref... ça devient tout de suite assez complexe pour une fonctionnalité dont on peut se passer. tongue


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#4 Le 05/06/2013, à 19:02

d0ctrine

Re : Effet de chargement dans les scripts [Résolu]

Merci de vos réponse, j'ai réussi à le faire pour la partie copie, par contre j'ai une réinjection a faire dans une base de donnée, et la je n'arrive pas à la faire. Voila mon script :

###################################################
#Téléchargement des paquets nécéssaire pour vtiger#
###################################################
if [ -e /etc/php5/apache2/conf.d/imap.ini ];
 then
  echo "php5-imap => OK "
 else
  apt-get -y install php5-imap
fi
if [ -e /etc/php5/apache2/conf.d/mysql.ini ];
 then
  echo "php5-mysql =>OK"
 else
  apt-get -y install php5-mysql
fi
if [ -e /etc/php5/apache2/conf.d/gd.ini ];
 then
  echo "php5-gd => OK"
 else
  apt-get -y install php5-gd
fi
#################################
#Modification du fichier php.ini#
#################################

sed -i -e 's/max_execution-time=30/max_execution_time=600/' -e 's/allow_call_time_pass_reference=Off/allow_call_time_pass_reference=On/' -e 's/display_erros=Off/display_errors=On/' -e 's/log_errors=On/log_errors=Off/' -e 's/error_reporting=E_ALL & ~E_DEPRECATED/E_WARNING & ~E_NOTICE & ~E_DEPRECATED/' /etc/php5/apache2/php.ini
service apache2 restart

#########################################
#Creation du nouvelles utilisateur MySql#
#########################################

echo "la base de donnée va être déployé"
#touch foo && mysql -u root -p -e 'source /root/vtiger_BDD.sql;' && rm foo &
#echo -n 'Déploiment en cours'
#while -e toto > /dev/null ; do
#sleep 1
#echo -n "."
#sleep 1
#echo -n "."
#sleep 1
#echo -ne "\r                "
#echo -ne "\rDéploiment en cours"
#done

mysql -u root -p -e "grant all privileges on ********.* to ********@'localhost' identified by '********'"

#################################
#Importation des fichier sources             #
#################################
echo ""
echo "L'extraction va commencer" 
sleep 5 
tar -xvf vtiger_source.tar 
cp -r vtigercrm /var/www & 
echo -n 'Copie en cours'
while pidof cp > /dev/null ; do
sleep 1
echo -n "."
sleep 1
echo -n "."
sleep 1
echo -ne "\r                "
echo -ne "\rCopie en cours"
done
rm -r vtigercrm
echo ""
echo "Restauration terminé !"

La partie importation des fichiers fonctionne bien, je l'ai mis en tâche de fond et j'ai crée une boucle qui fais défiller les "points" tant que le pid du cp n'est pas terminé. Pour la partie Mysql j'ai tenté la même technique ( pidof mysql), mais un processus mysql tourne en continue sur le serveur donc je ne sort pas de la boucle. Ensuite j'ai tenté la partie visible sur le script ( partie commenté ) mais cela fait planter mon script, je pense que le fichier foo est crée puis supprimé avant d'entrer dans la boucle. Je ne voie pas trop comment faire. Des idées ?

Le but du script est de reinstaller le logiciel Vtiger ( CRM ) sur un serveur vierge. Grâce aux codes sources, et à un dump de la BDD. Le code source et la BDD sont sauvegardés tous les soirs a minuit, grâce à logrotate.

Hors ligne

#5 Le 05/06/2013, à 22:13

Zakhar

Re : Effet de chargement dans les scripts [Résolu]

Oui ce n'est pas bon !
C'est pareil pour ton cp, si jamais tu as d'autres cp qui tournent sur ta machine, ça va faire la même boucle infinie.

En réalité, ce que tu veux utiliser est la variable spéciale du shell :

$!

Cette variable te rend le PID de la dernière commande lancée en tâche de fond.
Tu le fais immédiatement après avoir mis ton cp en tâche de fond, et ainsi tu sais quel est le process à suivre.

Aussi ta boucle d'attente n'est pas terriblement conçue. Tel que c'est fait là, tu vas toujours attendre un multiple de 3 secondes, même si ton cp se termine avant le multiple suivant.

C'est peut-être pas très grave compte tenu de la durée prévue de ton cp... à toi de voir si tu veux faire "mieux".


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#6 Le 06/06/2013, à 10:01

d0ctrine

Re : Effet de chargement dans les scripts [Résolu]

J'ai trouver une solution merci de votre aide, voila comment j'ai procédé :

echo "entré votre mot de passe root de MySQL"
read -s mdp
echo "la base de donnée va être déployé"

mysql -u root -p$mdp -e 'source /root/vtiger_BDD.sql' &
echo -n 'Deploiment en cours'
while ps -e | grep $! > /dev/null; do
sleep 1
echo -n "."
sleep 1 
echo -n "."
sleep 1
echo -ne "\r                     "
echo -ne "\rDeploiment en cours"
done

Pour le temps de latence de 3 secondes ça n'est pas un soucis, vue que le déploiement est plutôt long, on s'en aperçoit à peine.

Hors ligne