Recherche


imprimer pdf
Comment fonctionne le démarrage des services lors du boot ?

Introduction

Lorsque votre serveur dédié démarre, il passe par plusieurs phases d'initialisation appelées runlevels. C'est lors de ces phases que les différents services du serveur sont démarrés automatiquement. Les services cruciaux tels que la configuration du réseau sont démarrés à ce momentlà, mais également les applications telles que le serveur Apache, le serveur de mails ou le serveur MySQL.


Principe

Il existe 5 niveaux importants de runlevel :
- runlevel 0 : appelé lors de l'arrêt du système,
- runlevel 1 : appelé lorsque le système démarre en mono-utilisateur,
- runlevel 3 : appelé lorsque le système démarre en multi-utilisateur,
- runlevel 5 : appelé lorsque le système démarre en multi-utilisateur, mode graphique,
- runlevel 6 : appelé lorsque le système reboote.

Chaque service peut être configuré pour être démarré ou arrêté automatiquement lorsque le serveur entre dans l'un ou l'autre des runlevels. Le principe est de créer des liens dans le répertoire correspondant au runlevel qui pointeront vers le script de démarrage correspondant. Prenons par exemple named, le serveur DNS. Ce service est configuré pour démarrer en runlevel 3 et pour être stoppé en runlevel 0.

Le script de démarrage se trouve dans /etc/init.d/:

[root@julien root]# ls -al /etc/init.d/named
-rwxr-xr-x 1 root root 2281 jui 13 2004 /etc/init.d/named


Un lien est créé dans /etc/rc3.d/ (répertoire contenant les fichiers utilisés en runlevel 3) :

[root@julien root]# ls -al /etc/rc3.d/S13named
lrwxrwxrwx 1 root root 22 oct 2 15:55 /etc/rc3.d/S13named -> ../init.d/named


Et un autre dans /etc/rc0.d/ (répertoire contenant les fichiers utilisés en runlevel 0) :

[root@julien root]# ls -al /etc/rc0.d/K45named
lrwxrwxrwx 1 root root 15 oct 2 15:37 /etc/rc0.d/K45named -> ../init.d/named


En runlevel 3, le lien S13named appelle donc automatiquement la commande /etc/init.d/named start. En runlevel 0, le lien K45named appelle automatiquement la commande /etc/init.d/named stop.

La lettre S du lien indique une action de démarrage, la lettre K une action d'arrêt. Le numéro a également son importance, car il indique l'ordre dans lequel sont démarrés les services. Il est en effet impossible de démarrer le serveur DNS avant le service qui gère la configuration réseau.

Les serveurs dédiés OVH démarrent en runlevel 3. Par habitude, lorsque vous souhaitez qu'un service démarre automatiquement au boot du serveur, il suffit de le configurer pour les runlevels 2, 3, 4 et 5.


Adminitration

Fort heureusement, la Redhat fournit un outil qui va nous simplifier la vie. Il s'agit de chkconfig. Cet outil va nous permettre de lister la configuration actuelle et de la modifier très simplement.


  • Lister les services configurés au démarrage du serveur

Pour lister la configuration actuelle, vous devez utiliser cette commande :

[root@julien root]# /sbin/chkconfig --list
webmin 0:Arrêt 1:Arrêt 2:Marche 3:Marche 4:Arrêt 5:Marche 6:Arrêt
atd 0:Arrêt 1:Arrêt 2:Arrêt 3:Marche 4:Marche 5:Marche 6:Arrêt
watchdog 0:Arrêt 1:Arrêt 2:Arrêt 3:Arrêt 4:Arrêt 5:Arrêt 6:Arrêt
syslog 0:Arrêt 1:Arrêt 2:Marche 3:Marche 4:Marche 5:Marche 6:Arrêt


Ou, pour plus de précision, un seul service (ici mysql) :

[root@julien root]# /sbin/chkconfig --list mysql
mysql 0:Arrêt 1:Arrêt 2:Marche 3:Marche 4:Marche 5:Marche 6:Arrêt


Le résultat indique tous les niveaux de runlevel et l'action à entreprendre pour chaque démarrage ou arrêt du service.


  • Modifier le comportement d'un service au démarrage

Pour modifier les actions sur un plusieurs runlevel, la commande à utiliser est du type /sbin/chkconfig --level

Prenons par exemple le cas d'un serveur MySQL qui ne démarre pas automatiquement au boot du serveur. Un listage de la configuration montre que ce service n'est pas configuré pour démarrer automatiquement. Il suffit alors de modifier la configuration pour le mettre automatiquement en service lors du prochain démarrage du serveur :

[root@julien root]#/sbin/chkconfig --list mysql
mysql 0:Arrêt 1:Arrêt 2:Arrêt 3:Arrêt 4:Arrêt 5:Arrêt 6:Arrêt

[root@julien root]# /sbin/chkconfig --level 2345 mysql on

[root@julien root]# /sbin/chkconfig --list mysql
mysql 0:Arrêt 1:Arrêt 2:Marche 3:Marche 4:Marche 5:Marche 6:Arrêt



Ajouter un service au démarrage

Cet utilitaire est également capable de prendre en charge un nouveau service à partir de son fichier de démarrage et de créer automatiquement tous les liens nécessaires.

Prenons par exemple le fichier de démarrage de MySQL :

[root@julien root]# cat /etc/init.d/mysql
#!/bin/sh
# Copyright Abandoned 1996 TCX DataKonsult? AB & Monty Program KB & Detron HB
# This file is public domain and comes with NO WARRANTY of any kind

# MySQL daemon start/stop script.

# Usually this is put in /etc/init.d (at least on machines SYSV R4 based
# systems) and linked to /etc/rc3.d/S99mysql and /etc/rc0.d/K01mysql.
# When this is done the mysql server will be started when the machine is
# started and shut down when the systems goes down.

# Comments to support chkconfig on RedHat? Linux
# chkconfig: 2345 90 20
# description: A very fast and reliable SQL database engine.



La ligne intéressante est celle-ci: chkconfig: 2345 90 20, car elle permet la configuration automatique du service MySQL à l'aide de l'outil chkconfig. En l'utilisant, le démarrage de MySQL sera automatiquement ajouté aux runlevels 2, 3, 4 et 5 avec le numéro de séquence 90 pour une action de démarrage et le numéro de séquence 20 pour une action d'arrêt.

Par exemple :

[root@julien root]# /sbin/chkconfig --add mysql



Vérifions que tout est correct :

[root@julien root]# /sbin/chkconfig --list mysql
mysql 0:Arrêt 1:Arrêt 2:Marche 3:Marche 4:Marche 5:Marche 6:Arrêt

[root@julien root]# ls -al /etc/rc3.d/S90mysql
lrwxr-xr-x 1 root root 15 fév 12 16:17 /etc/rc3.d/S90mysql -> ../init.d/mysql

[root@julien root]# ls -al /etc/rc0.d/K20mysql
lrwxr-xr-x 1 root root 15 fév 12 16:17 /etc/rc0.d/K20mysql -> ../init.d/mysql



Supprimer un service au démarrage

Une fois que la gestion d'un service a été ajoutée à chkconfig, il reste dans la liste tant que le fichier de démarrage existe. Par contre, il est possible de supprimer l'action de démarrage dans tous les runlevels en une seule fois.

Par exemple :

[root@julien root]# /sbin/chkconfig --del mysql



Vérifions que tout a été supprimé :

[root@julien root]# /sbin/chkconfig --list mysql
mysql 0:Arrêt 1:Arrêt 2:Arrêt 3:Arrêt 4:Arrêt 5:Arrêt 6:Arrêt

[root@julien root]# ls -al /etc/rc3.d/S90mysql
ls: /etc/rc3.d/S90mysql: Aucun fichier ou répertoire de ce type