Gcolpart.com by reg

Les runlevel sous Linux


Les runlevel sont les différents niveaux de démarrage/arrêt sous Unix/Linux.
De petites différences existent suivant les différentes distributions. Je m'intéresse ici aux runlevel sous Debian GNU/Linux.
Des scripts shell existent dans le répertoire /etc/init.d/
Ces scripts somportent généralement ces lignes:
#!/bin/sh
case $1 in
start) ...
...
;;
stop) ...
...
;;
esac
On peut ainsi démarrer et lancer des logiciels directement. Par exemple, pour démarrer apache:
# /etc/init.d/apache start

Ainsi on peut créer un script appelé par exemple mon_script dans /etc/init.d/ mais il ne faut pas oublier de les rendre exécutables à l'aide de la commande:
# chmod +x /etc/init.d/mon_script start

Il existe donc 6 runlevel sous Debian GNU/Linux:
Le runlevel 0 correspond à l'arrêt du système
Le runlevel 1 correspond au démarrage single-user
Le runlevel 2 correspond mode de démarrage normal
Les runlevels 3-5 correspondent à des modes de démarrage que l'on peut se configurer
Le runlevel 6 correspond au redémarrage

Les runlevel sont des niveaux constitués d'un ensemble de liens situés dans les répertoires /etc/rcX.d/ qui pointent vers les scripts situés dans /etc/init.d/
Ces liens sont de la forme Xnnmon_script ce qui pointe vers /etc/init.d/mon_script
X= S ou K, où S passe le paramètre start au script mon_script et K passe le paramètre stop
Si il n'y a pas de paramètres, le script est tout simplement executé que ca soit S ou K
nn= numéro correspondant à la priorité de démarrage dans le runlevel. Les numéros les plus petits sont démarrés en premiers.
Tous les scripts dont le lien commence par K sont executés en premier, ensuite vient les cripts dont le lien commence par S.
La commande update-rc.d permet de gérer les différents runlevel (mais on peut également créer les liens "à la main")
Par exemple, pour ajouter le script mon_script dans tous les runlevel:
# update-rc.d mon_script defaults
(Attention, si votre script ne comporte pas de start/stop, il sera executé à chaque runlevel)
Pour retirer un script mon_script de tous les runlevel:
# update-rc.d -f mon_script remove
Pour régler avec précision un script dans un runlevel (celui-ci ne doit pas du tout être présent dans les runlevel):
# update-rc.d mon_script start 42 2 3 5 . stop 31 0 6 .
Ce qui démarre mon_script dans les runlevel 2, 3 ou 5 avec une priorité 42 et arrête mon_script avec une priorité 31 dans les runlevel 0 et 6 (ceci est un exemple).

Au démarrage de Linux, le noyau est chargé puis il passe la main au processus INIT.
Ce processus démarre tout ce qui se trouve dans /etc/rcS.d/ puis il lance par défaut le runlevel 2 (on peut changer cela dans le fichier /etc/inittab). Par exemple, si l'on veut démarrer en mode single-user (runlevel 1) (souvent en cas de problème du système), on tape Linux 1 au prompt de LILO.

Howto runlevel Debian (en anglais)


powered by Apache     powered by Debian     Valid XHTML 1.1     Valid CSS     ecrit avec Vim    
Copyright (c) 2002-2013 Gregory Colpart. Infogerance serveur