lancement de service sur mesure au demarrage

Le
Christophe PEREZ
Bonjour,

Toujours dans le cadre de ma procédure de boot dépendant de la connexion
à mon serveur ou pas, sur mon portable sous mdk 9.1, j'ai fait un script,
lancé au démarrage, juste après le service network.
Ce script vérifie s'il est connecté au serveur ou pas, et selon le cas
doit faire que certains services seront lancés ou pas (je n'ai pas dit
qu'il doit les lancer lui même).

J'avais pensé qu'un chkconfig on ou off sur le service en question
fonctionnerait, mais ce n'est pas le cas.
C'est comme si la liste des services à lancer étaient mémorisés au début
de la procédure de lancement des services, et que leur état ne soit plus
vérifié par la suite.

J'ai donc un truc du genre :
if [ -z "$IP" -a "$EXIST_SERVEUR" -eq 1 ] ; then
grpintf "fonctionnement client"
chkconfig httpd off
else
grpintf "fonctionnement autonome"
chkconfig httpd on
fi
Mais quand je boote en autonome, les log me montrent bien que je suis en
fonctionnement autonome, pourtant httpd n'est pas lancé, mais un
chkconfig --list httpd me donne bien :
httpd 0:Arrêt 1:Arrêt 2:Arrêt 3:Marche 4:Marche
5:Marche6:Arrêt

Donc, il aurait du être lancé.

Quelqu'un saurait m'aiguiller sur cette "mémorisation" de l'état des
services ?
Ou alors il faut que j'adopte une autre technique ?
Je ne souhaite pas, si possible, toucher aux scripts concernés, et
rassembler tout ça en un seul script.
Je ne souhaite pas non plus lancer ou arrêter dans mon script les
services, car à ce moment là, l'ordre ne sera plus respecté (par
rapport aux autres services auxquels je ne touche pas et qui seront donc
lancé avant ou après mon script).

En espérant avoir été clair, merci d'avance.

--
Christophe PEREZ
Écrivez moi sans _faute !
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
TiChou
Le #1048792
Dans le message *Christophe PEREZ* tapota sur f.c.o.l.configuration :

Bonjour,


Bonjour,

Toujours dans le cadre de ma procédure de boot dépendant de la connexion
à mon serveur ou pas, sur mon portable sous mdk 9.1, j'ai fait un script,
lancé au démarrage, juste après le service network.
Ce script vérifie s'il est connecté au serveur ou pas, et selon le cas
doit faire que certains services seront lancés ou pas (je n'ai pas dit
qu'il doit les lancer lui même).

J'avais pensé qu'un chkconfig on ou off sur le service en question
fonctionnerait, mais ce n'est pas le cas.
C'est comme si la liste des services à lancer étaient mémorisés au début
de la procédure de lancement des services, et que leur état ne soit plus
vérifié par la suite.


[...]

Quelqu'un saurait m'aiguiller sur cette "mémorisation" de l'état des
services ?


Oui. Quand le système passe à un runlevel, il lance le script /etc/rc.d/rc
qui va alors scruter dans le répertoire /etc/rc<runlevel_en_question>.d/
tous les scripts S* présent et va « mémoriser » cette liste de scripts qu'il
va lancer les uns après les autres s'ils sont exécutables.

Ou alors il faut que j'adopte une autre technique ?


Oui puisque vous ne pourrez pas intervenir directement sur la liste «
mémorisée » des scripts à lancer.

Je ne souhaite pas, si possible, toucher aux scripts concernés, et
rassembler tout ça en un seul script.
Je ne souhaite pas non plus lancer ou arrêter dans mon script les
services, car à ce moment là, l'ordre ne sera plus respecté (par
rapport aux autres services auxquels je ne touche pas et qui seront donc
lancé avant ou après mon script).


Vous ne laissez pas beaucoup de possibilités. :)

On pourrait utiliser le runlevel 4 qui est en principe inutilisé. Au
démarrage de la machine il suffirait alors de choisir sous quel runlevel
démarrer, le runlevel par défaut où tous les services seront lancés et le
runlevel 4 où seulement certains services seraient lancés.
Sachez que sur certaines distributions on peut avoir pour un même runlevel
donné plusieurs modes de lancement des initscripts (sous Gentoo on appelle
ça les softlevels), le mode par défaut et par exemple le mode offline qui ne
lancera que les scripts voulus.
On a aussi une gestion des dépendances, si tel service ne peut être lancé,
les autres qui en dépendent ne le seront pas aussi. Par exemple si le
service réseau n'est pas lancé, les services des daemons serveurs liés au
réseau ne seront pas lancés.
Malheureusement la Mandrake ne permet pas de gérer les initscripts de ces
manières là.

Une autre possibilité, c'est dans votre script jouer sur le mode exécutable
des scripts qui devront ou non être lancés. Le script /etc/rc.d/rc vérifie
si le script du service à lancer est exécutable ou non. S'il ne l'est pas,
il ne tentera rien et passera immédiatement au service suivant.
En reprenant votre bout de code, cela donnerait :

if [ -z "$IP" -a "$EXIST_SERVEUR" -eq 1 ] ; then
grpintf "fonctionnement client"
chmod -x /etc/init.d/httpd
else
grpintf "fonctionnement autonome"
chmod +x /etc/init.d/httpd
fi

Je ne vois pour l'instant pas d'autres manières de faire si ce n'est en
modifiant soit les scripts des différents services concernés soit en
modifiant le script /etc/rc.d/rc.

En espérant avoir été clair,


De même.

merci d'avance.


Avec plaisir.

--
TiChou

JBJ
Le #1048615

Bonjour,

Toujours dans le cadre de ma procédure de boot dépendant de la connexion
à mon serveur ou pas, sur mon portable sous mdk 9.1, j'ai fait un script,
lancé au démarrage, juste après le service network.
Ce script vérifie s'il est connecté au serveur ou pas, et selon le cas
doit faire que certains services seront lancés ou pas (je n'ai pas dit
qu'il doit les lancer lui même).

J'avais pensé qu'un chkconfig on ou off sur le service en question
fonctionnerait, mais ce n'est pas le cas.
C'est comme si la liste des services à lancer étaient mémorisés au début
de la procédure de lancement des services, et que leur état ne soit plus
vérifié par la suite.

J'ai donc un truc du genre :
if [ -z "$IP" -a "$EXIST_SERVEUR" -eq 1 ] ; then
grpintf "fonctionnement client"
chkconfig httpd off
else
grpintf "fonctionnement autonome"
chkconfig httpd on
fi
Mais quand je boote en autonome, les log me montrent bien que je suis en
fonctionnement autonome, pourtant httpd n'est pas lancé, mais un
chkconfig --list httpd me donne bien :
httpd 0:Arrêt 1:Arrêt 2:Arrêt 3:Marche 4:Marche
5:Marche6:Arrêt

Donc, il aurait du être lancé.

Quelqu'un saurait m'aiguiller sur cette "mémorisation" de l'état des
services ?
Ou alors il faut que j'adopte une autre technique ?
Je ne souhaite pas, si possible, toucher aux scripts concernés, et
rassembler tout ça en un seul script.
Je ne souhaite pas non plus lancer ou arrêter dans mon script les
services, car à ce moment là, l'ordre ne sera plus respecté (par
rapport aux autres services auxquels je ne touche pas et qui seront donc
lancé avant ou après mon script).

En espérant avoir été clair, merci d'avance.


Bonjour,
l'explication ne me semble pas trés claire, d'aprés ce que j'ai compris
l'ordre des services à lancer doit être respecté mais certains services
seront lancés ou pas suivant le resultat de la connexion. Si c'est bien
cela , pourquoi ne pas modifier /etc/rc.d/rc qui s'occupe de lancer les
services ?

Cordialement.

Christophe PEREZ
Le #1524126
Le Tue, 20 Apr 2004 17:13:34 +0200, TiChou a écrit:

Oui. Quand le système passe à un runlevel, il lance le script /etc/rc.d/rc
qui va alors scruter dans le répertoire /etc/rc<runlevel_en_question>.d/
tous les scripts S* présent et va « mémoriser » cette liste de scripts qu'il
va lancer les uns après les autres s'ils sont exécutables.


Merci pour cette explication.

Oui puisque vous ne pourrez pas intervenir directement sur la liste «
mémorisée » des scripts à lancer.


Au moins, c'est clair ;-)

Vous ne laissez pas beaucoup de possibilités. :)


Je suis comme ça moi, vous savez ;-)
Plus sérieusement, je préfère fixer les choses, plutôt que de voir du
temps perdu à me proposer des choses qui ne me conviendront pas et que je
n'appliquerai de toutes les façons pas.

On pourrait utiliser le runlevel 4 qui est en principe inutilisé. Au


En principe... ;-)
Dans mon cas, j'en utilise 3. 4, 5, et même un 7 ;-)

démarrage de la machine il suffirait alors de choisir sous quel runlevel
démarrer, le runlevel par défaut où tous les services seront lancés et le
runlevel 4 où seulement certains services seraient lancés.


Oui, mais même si j'ai pris un cas simple avec httpd, il faut que je
précise que ça peut être l'inverse pour d'autres services à ne pas
lancer en "autonome" alors qu'ils sont lancé en "client" du serveur.

Sachez que sur certaines distributions on peut avoir pour un même runlevel
donné plusieurs modes de lancement des initscripts (sous Gentoo on appelle
ça les softlevels), le mode par défaut et par exemple le mode offline qui ne
lancera que les scripts voulus.
On a aussi une gestion des dépendances, si tel service ne peut être lancé,
les autres qui en dépendent ne le seront pas aussi. Par exemple si le
service réseau n'est pas lancé, les services des daemons serveurs liés au
réseau ne seront pas lancés.


Ah oui, bien tout ça !

Malheureusement la Mandrake ne permet pas de gérer les initscripts de ces
manières là.


Pfff... me faire saliver pour rien ;-)

Une autre possibilité,


Une autre ?
Il y en avait une avant ?

c'est dans votre script jouer sur le mode exécutable
des scripts qui devront ou non être lancés. Le script /etc/rc.d/rc vérifie
si le script du service à lancer est exécutable ou non. S'il ne l'est pas,
il ne tentera rien et passera immédiatement au service suivant.


Ah ! Bien ça ! Je n'y avais pas du tout pensé.

En reprenant votre bout de code, cela donnerait :


bien compris oui.

Je ne vois pour l'instant pas d'autres manières de faire si ce n'est en
modifiant soit les scripts des différents services concernés soit en
modifiant le script /etc/rc.d/rc.


Mouais...
Ce n'est pas la modification en elle même qui me gêne, mais c'est déjà
le manque de souplesse, et surtout le fait que n'importe quelle maj
mandrake qui me foirer tout ça ;-)

Je crois que je vais adopter le principe de l'état exécutable ou pas des
scripts.
Si problème, je reviendrai en parler.

En espérant avoir été clair,


De même.


Parfaitement.

Avec plaisir.


Merci beaucoup, non seulement pour la solution, mais surtout pour les
explications très pédagogues et à mon niveau ;-)

--
Christophe PEREZ
Écrivez moi sans _faute !


Christophe PEREZ
Le #1524125
Le Tue, 20 Apr 2004 18:09:22 +0200, JBJ a écrit:

l'explication ne me semble pas trés claire,


Ah, j'avais pourtant fait un effort ;-)

d'aprés ce que j'ai compris
l'ordre des services à lancer doit être respecté mais certains services
seront lancés ou pas suivant le resultat de la connexion. Si c'est bien
cela
C'est bien ça... donc c'était clair alors ? :-)


, pourquoi ne pas modifier /etc/rc.d/rc qui s'occupe de lancer les
services ?


Comme vu par et avec TiChou, ce n'est pas, pour moi (dans mon cas)
l'idéal, et je préférais faire autrement.

--
Christophe PEREZ
Écrivez moi sans _faute !

Christophe PEREZ
Le #1524102
Le Tue, 20 Apr 2004 15:45:09 -0400, Christophe PEREZ a écrit:

Je crois que je vais adopter le principe de l'état exécutable ou pas des
scripts.
Si problème, je reviendrai en parler.


Qu'un mot à dire : Impeccable !
C'est exactement ce que je voulais.
en un seul script, je contrôle le type de démarrage que je souhaite, et
c'est vrai d'un coup pour tous les runlevels que j'utilise.

Merci encore TiChou.

PS : Si un jour, vous ne savez pas quoi faire, et que vous souhaitez
encore divulguer votre savoir bien utile aux gens comme moi, n'hésitez
pas à regarder mon message :
Date: Wed, 14 Apr 2004 19:32:35 -0400
From: Christophe PEREZ Message-ID: Subject: erreur au boot : mount: mount: mount point 0 does not exist

qui est resté sans réponse :-))

--
Christophe PEREZ
Écrivez moi sans _faute !

Publicité
Poster une réponse
Anonyme