Script pour démarrer Apache/MySQL - Avis ?

Fermé
oliviertomgo Messages postés 305 Date d'inscription jeudi 30 juillet 2009 Statut Membre Dernière intervention 13 juillet 2015 - Modifié par oliviertomgo le 17/09/2011 à 03:41
 Utilisateur anonyme - 17 sept. 2011 à 18:07
Bonjour,

Je débute dans la création de scripts linux alors je ne sais pas si celui que je viens de faire est correct. Avant de le lancer pour le tester, j'aurai aimé l'avis d'utilisateurs avertis.

Mon script :

bjr="Bonjour $USER ..."
aplc="Démarrage du serveur Apache ..."
mlc="Démarrage du serveur MySQL ..."
exap="/etc/init.d/apache2 start"
exm="/etc/init.d/mysql start"
set bjr
set aplc
set mlc
set exap
set exm
echo $bjr
echo $aplc
echo $exap
if [!$exap]
then
echo "Erreur lors du démarrage d'Apache ..."
exit 1
else
echo "Apache démarré avec succès ..."
echo $mlc
echo $exm
if [!$exm]
then
echo "Erreur lors du démarrage de MySQL"
exit 1
else
echo "Apache et MySQL OK ... FIN du script"

Merci à vous !

EDIT: Il se peut qu'il y ait de belles bourdes dans ce script ayant l'habitude de développer en PHP, j'avoue m'être déjà planté avec les if ! en mettant des accolades au lieu de then et des parenthèses au lieu de crochets.
Le ! signifiant que le résultat retourné est différent de celui qui est attendu, je m'attends là aussi peut-être à une belle confusion avec le php ou tout au moins m'être trompé dans la façon de tourner le code. A vous de me dire !
Merci encore par avance pour vos avis !


A voir également:

6 réponses

jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
Modifié par jisisv le 17/09/2011 à 05:06
Bonsoir,
Premièremnt:
Ls scripts de démarrage ne sont pa lancés. Tu peux t'inspirer de ceci:
    
[root@osiris ]~#exap="/etc/init.d/apache2 inxistant" ; $exap ; echo $?    
Usage: /etc/init.d/apache2 {start|stop|graceful-stop|restart|reload|force-reload|start-htcacheclean|stop-htcacheclean|status}.    
1    
[root@osiris ]~# exap="/etc/init.d/apache2 start"    
[root@osiris ]~# exap="/etc/init.d/apache2 inxistant"    
[root@osiris ]~# exap="/etc/init.d/apache2 stop"    
[root@osiris ]~#$exap; echo $?    
Stopping web server: apache2 ... waiting .    
0


Tu places ta comande dans ne variable et tu l'exécutes; tu récupères le code d'erreur avec la variable $?.

Deuxièmement:
Les tests , correspondent à des commandes internes ou externes
    
[root@osiris ]~# which [    
/usr/bin/[    
[root@osiris ]~# help [ |head -3    
[: [ arg... ]    
    Evaluate conditional expression.    

Tu dois donc IMPERATIVEMENTI placer un espace entre les crochets et les commandes:
    
[root@osiris ]~# [-e .bashrc ] ; echo $?    
-su: [-e : commande introuvable    
127    
[root@osiris ]~# [ -e .bashrc ] ; echo $?    
0

Troisièmement:
Respecte la syntaxe des instructions conditionnelles:
    
johand@osiris:~/tmp$ cat isroot     
if [ $UID -eq 0 ] ; then    
 echo "You are root"    
else    
 echo "Sorry"    
fi     
johand@osiris:~/tmp$ source isroot     
Sorry    
Voilà en gros les principales remarques

As-tu lu le tutoriel: bash https://abs.traduc.org/abs-5.0-fr/ ?

Bon scripting.
Johan
Gates gave ^H sold you the windows.
GNU gave us the whole house.(Alexandrin)
0
oliviertomgo Messages postés 305 Date d'inscription jeudi 30 juillet 2009 Statut Membre Dernière intervention 13 juillet 2015 40
17 sept. 2011 à 05:00
Bonsoir Johan, merci pour tes explications ! Déjà pour les crochets et les espaces à respecter, de même que pour le ; je pensais que la fin d'un echo était reconnu d'emblée sans avoir à ajouter de ;

Sinon, je ne cherche pas à lancer le script au démarrage. Pour ça, un service apache et mysql fait déjà l'affaire que j'ai désactivé pour ne lancer les serveurs qu'à la demande lorsque je développe. Pour cette raison pour simplifier le lancement des serveurs sans avoir à chaque fois passer par le terminal. Avec ce script, je n'aurai plus qu'à l'exécuter ce qui sera tout de suite plus pratique et plaisant à la fois de voir son propre script s'exécuter surtout que celui-ci est une première.

Merci pour ton lien que je ne connaissais pas. Je ne l'ai donc pas lu mais je vais me pencher dessus ! Sacré tuto ! De quoi bien m'occuper !
0
oliviertomgo Messages postés 305 Date d'inscription jeudi 30 juillet 2009 Statut Membre Dernière intervention 13 juillet 2015 40
17 sept. 2011 à 05:06
euh les ; à la fin d'une instruction en fait non pas en fin d'un echo ... décidemment pas évident de se détacher du php. En php il n'y a pas de ; en ouvrant une instruction mais une ouverture d'accolade et éventuellement un ; après un echo ou variable $variable = 'toto'; par ex ... tandis que là ça n'a plus grand chose à voir !

D'ailleurs je serais bien curieux de connaître le language utilisé. Ce serait pas du C ?
0
Utilisateur anonyme
17 sept. 2011 à 11:02
salut,

la commande set ne fait pas ce que tu crois : elle (dés)active des options du shell.

les commandes dans des variables, c'est pas top : utilise des fonctions.

les tests d'exécution de commandes se font sans crochets :
if /etc/init.d/apache2 stop
then 
echo "Apache et MySQL OK ... FIN du script" 
else 
echo "Erreur lors du démarrage de MySQL" 
exit 1 
fi

dans ton code tu testes la variable, pas son action.
et pas besoin de négation si il y a une alternative.

if se termine par fi
les ; sont utilisés lorsque des commandes sont sur la même ligne.

bonne continuation
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
oliviertomgo Messages postés 305 Date d'inscription jeudi 30 juillet 2009 Statut Membre Dernière intervention 13 juillet 2015 40
Modifié par oliviertomgo le 17/09/2011 à 14:45
Aie m.... je pensais effectivement que la commande set servait à déclarer les variables ! Gloups ...

Par contre une chose que je comprends pas. dans le code donné, tu vérifies qu'apache soit bien arrêté :
if /etc/init.d/apache2 stop et tu met l'echo ensuite comme quoi apache est ok ? ce serait pas plutôt start au lieu de stop ? ou une vérification contraire quelque chose du genre :
a = /etc/init.d/apache2 stop
if !$a
# je me sers directement de la variable puisqu'à priori associer a à quelque chose déclare a d'emblée.
then
echo "Apache Ok"
fi

Juste pour l'exemple car pas très logique comme procédé. Mieux vaut tester qu'il soit bien démarré mais alors comment vérifier l'action d'une variable si en fait je ne fais que tester la variable ?
Pour l'instant, j'essaye comme ça. Les fonctions je verrai plus tard. En tout cas merci pour le conseil
0
vu que la syntaxe n'est pas correcte, et que l'indentation est absente, j'ai compris comme j'ai pu.
désolé si j'ai mal retranscrit tes intentions ;)

il est possible d'utiliser des tests simplifiés
/etc/init.d/apache start && echo "Succès"
/etc/init.d/apache stop || echo "Echec"
et de combiner
/etc/init.d/apache start && echo "démarrage : Succès" || echo "démarrage : Echec"
c'est très pratique pour des tests simples

tu verras tout ça en lisant l'ABS.

bonne continuation.
0