Script pour démarrer Apache/MySQL - Avis ? [Fermé]

Signaler
Messages postés
305
Date d'inscription
jeudi 30 juillet 2009
Statut
Membre
Dernière intervention
13 juillet 2015
-
 Utilisateur anonyme -
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 !


6 réponses

Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
948
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)
Messages postés
305
Date d'inscription
jeudi 30 juillet 2009
Statut
Membre
Dernière intervention
13 juillet 2015
41
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 !
Messages postés
305
Date d'inscription
jeudi 30 juillet 2009
Statut
Membre
Dernière intervention
13 juillet 2015
41
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 ?

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
Messages postés
305
Date d'inscription
jeudi 30 juillet 2009
Statut
Membre
Dernière intervention
13 juillet 2015
41
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
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.