Les mécanismes de démarrage et d’arrêt

8 février 2007

Télécharger en PDF


Ce tuto est consacré au démarrage et à l'arrêt du système pour les systèmes Unix de type System V.


Table des matières

I.Processus de démarrage 1

(1)Niveau d'exécution : runlevel 1

(2)Les scripts de démarrage Runlevel Changes 2

II.Fichier de script de démarrage 2

III.Détermination du runlevel en cours 4

IV.Gérer le démarrage des services 4

(1)Généralités 4

(2)Sous Fedora 5

(a)Lister les services démarrables 5

(b)Ajouter un service pour lancement au démarrage 5

(c)Activer ou désactiver un service au démarrage 5

(d)Gestion de la commande avec setup 5

(e)Gestion manuel du lancement des services 5

(f)Lister les services existants 5

(3)Sous Debian 6

(a)Gestion manuel du lancement des services 6

(b)Lister les services démarrables 6

(c)Ajouter un service pour lancement au démarrage 6

(d)Désactiver un service au démarrage 6

(e)Lister les services existants 6

(4)Manuellement (à éviter) 7



I.Processus de démarrage

(1)Niveau d'exécution : runlevel

Tout d'abord, le fichier /etc/inittab est lu par le système pour déterminer le « runlevel » ou niveau de démarrage. Ces niveaux vont de 0 à 6 et ont une signification qui peut dépendre de la distribution. Dans le cas de Fedora, il y a les niveaux suivant :


(2)Les scripts de démarrage Runlevel Changes


Ensuite, un certain nombre de scripts sont exécutés en fonction de ce runlevel.
En regardant attentivement, on s'aperçoit que le script /etc/rc.d/rc est exécuté avec comme paramètre le runlevel.


Ce script va exécuter tous les programmes se trouvant dans /etc/rc.d/rcX.d ou X représente le runlevel.


Dans ces répertoires, on trouve des liens symboliques vers des scripts du dossier /etc/init.d/. Ce dernier dossier contient les scripts de démarrage des services. Cela permet de n'avoir qu'une seule copie d'un script de démarrage.


On trouve dans les répertoires /etc/rc.d/rcX.d deux types de scripts : ceux commençant par « S » et ceux commençant par « K ». Seuls les scripts commençant par S sont exécutés au démarrage. A l'arrêt du système si pour un service donné un script commençant par S existe il est exécuté avec l'argument « stop », sinon le script commençant par K est exécuté. Ceci permet de ne pas supprimer les scripts que l'on ne veut plus exécuter, mais simplement les renommer. Du fait que ce sont des liens, on ne garde qu'une seule copie des scripts de démarrage réel.


Le numéro se trouvant après le S indique l'ordre dans lequel vont être exécutes les scripts, plus le numéro est petit, plus il est prioritaire et sera donc exécuté avant les autres. Ceci s'explique par le fait que, par exemple, la couche réseau doit être démarrée avant de démarrer le démon apache (serveur web).


L'ensemble de ces scripts est utilisé aussi bien lors du démarrage, au quel cas ils reçoivent l'argument start, qu'à l'extinction du système avec l'argument stop.

De plus en général, un troisième argument « status » permet de connaître l'état du service lancé par ce script.


Enfin, un dernier fichier est exécuté : /etc/rc.d/rc.local.


II.Fichier de script de démarrage


Ainsi, lorsque l'on veut paramétrer un nouveau service, deux solutions sont envisageables, soit créer un nouveau script daemon (basé sur un script existant) et faire des liens au besoin dans les dossiers /etc/rc.d/rcX.d, soit ajouter des lignes dans le fichier rc.local. Il est bien évident

que la première solution est la meilleure.


Voici un script de démarrage permettant de démarrer un service :


Contenu du fichier /etc/rc.d/init.d/démon

#!/bin/bash

#

# démon Startup script for nom du démon

#

# chkconfig: liste_runlevel_démarrage ordre_démarrage ordre_arrêt

# description: Desciption du démon

# processname: nom_exécutable_démon

# config: /chemin/fichier/config_principal_démon

# pidfile: /var/run/démon.pid


# Source function library : daemon, pidofproc...

. /etc/rc.d/init.d/functions


# Path to the server binary, and short-form for messages.

Serv=/chemin/démon

prog=nom_court_démon

pidfile=/var/run/démon.pid

lockfile=/var/lock/subsys/démon.lock

RETVAL=0


# fonction pour lancer le démon

start() {

echo -n $"Starting $prog: "

#on lance le démon en arrière plan

daemon $serv

RETVAL=$?

#on crée le fichier de lock

echo

[ $RETVAL = 0 ] && touch ${lockfile}

#on inscrit le pid dans le fichier

pidofproc $serv > ${pidfile}

return $RETVAL

}

# fonction pour arrêter le démon

stop() {

echo -n $"Stopping $prog: "

#stopper le processus en douceur (SIGINT ou autre)

killproc $serv

RETVAL=$?

#on supprime le fichier du pid et du lock

echo

[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}

}


# On regarde ce que l'on nous demande de faire au démon

case "$1" in

start)

start

;;

stop)

stop

;;

status)

#routine par défaut pour obtenir le status du démon

#affiche des choses comme « en cours d'exécution »

status $serv

RETVAL=$?

;;

restart)

stop

start

;;

*)

echo $"Usage: $prog {start|stop|restart|status|help}"

exit 1

esac


exit $RETVAL


III.Détermination du runlevel en cours

Pour déterminer le runlevel que l'on utilise on peut exécuter la commande runlevel en root.

Le runlevel courant se trouve dans le fichier /etc/inittab à la ligne id:x:initdefault: x est le niveau de démarrage. Si par exemple, on trouve id:5:initdefault: c'est que l'on est au niveau 5.


IV.Gérer le démarrage des services

(1)Généralités

Les scripts de démarrage sont installés dans /etc/init.d/. Pour démarrer ou arrêter un service à un certain niveau d'exécution (runlevel), il suffit d'ajouter des liens symboliques du type SXXdémon ou KXXdémon afin d'indiquer que le démon démon doit être démarré ou arrêté après les services dont le XX est inférieur à celui-ci.

Les scripts S servent à démarrer les services.

Les scripts K servent à arrêter les services.


(2)Sous Fedora

(a)Lister les services démarrables

La commande chkconfig --list sert à lister l'arrêt et le démarrage des services et à gérer le démarrage et l'arrêt des services.


(b)Ajouter un service pour lancement au démarrage

Pour ajouter le service démon au démarrage :

[root]# chkconfig --add démon

[root]# chkconfig démon on


(c)Activer ou désactiver un service au démarrage

Pour activer et désactiver un service :

[root]# chkconfig --level niveau démon on
[root]# chkconfig --level niveau démon off

(d)Gestion de la commande avec setup

On peut aussi activer et désactiver un service par la commande setup :

[root]# setup


(e)Gestion manuel du lancement des services

La commande service permet d'exécuter un script de démarrage pour lancer/stopper/interroger un service en fonction du niveau de démarrage :

[root]# service <nom_du_service> start

[root]# service <nom_du_service> stop

[root]# service <nom_du_service> restart

[root]# service <nom_du_service> status


(f)Lister les services existants

On peut aussi obtenir l'état de tous les services existants :


[root]# service --list-all

(3)Sous Debian

(a)Gestion manuel du lancement des services

On peut exécuter directement les scripts de démarrage des services depuis le dossier /etc/init.d/ pour démarrer/arrêter/redémarrer/connaître l'état d'un service :

[root]# /etc/init.d/<nom_du_service> start

[root]# /etc/init.d/<nom_du_service> stop

[root]# /etc/init.d/<nom_du_service> restart

[root]# /etc/init.d/<nom_du_service> status

(b)Lister les services démarrables

Pour lister les services démarrables au niveau d'exécution Niveau, il suffit de taper :

[root]# ls -l /etc/rc.d/rc.Niveau/S*

(c)Ajouter un service pour lancement au démarrage

La commande update-rc.d permet de gérer le lancement des services à certains niveaux d'exécution :

[root]# update-rc.d nom_démon defaults NN

[root]# update-rc.d nom_démon defaults NN MM

[root]# update-rc.d nom_démon start NN 2 3 5 . stop MM 0 6 .

(d)Désactiver un service au démarrage

La commande update-rc.d permet de gérer le lancement des services à certains niveaux d'exécution. Pour désactiver un service :

[root]# update-rc.d nom_démon stop 20 Niveau .

[root]# update-rc.d -f nom_démon remove


Note : certains services peuvent contenir un paramètre de démarrage dans leur fichier /etc/default/démon.

(e)Lister les services existants

Pour lister les services existants, on pourra simplement lister le contenu du dossier /etc/init.d :

[root]# ls -l /etc/init.d/

(4)Manuellement (à éviter)

Ce qui pourrait se faire manuellement par (il faut cependant connaître l'ordre de démarrage des démons pour ne pas, par exemple, lancer un service TCP/IP avant de lancer les interfaces réseaux) :

[root]# ln -s /etc/init.d/démon /etc/rc.d/rcX.d/Sxxdémon
[root]# ln -s /etc/init.d/démon /etc/rc.d/rcX.d/Kxxdémon


[root]# rm /etc/rc.d/rcX.d/Sxxdémon
[root]# rm /etc/rc.d/rcX.d/Kxxdémon

Donc pour changer l'état de démarrage d'un service :

[root]# mv /etc/rc.d/rc5.d/Sxxmyqld /etc/rc.d/rc5.d/Kxxmyqld

sharevb