Le
run level, ou
niveau de fonctionnement, est une fonction utilisée par les systèmes d'exploitation de type
UNIX ou
Linux utilisant le système d'init (
système V).
Il existe différents run levels, qui correspondent chacun à un ensemble d'applications à mettre en marche. Ainsi, quand le système est démarré, il passe par le run level 1 puis par le run level 2, et il est possible de configurer les applications qui seront lancées à ce moment ; il existe en tout sept run levels, le run level 6 étant généralement affecté au redémarrage de l'ordinateur, et le run level 0 à l'arrêt. S'y ajoute souvent le niveau S (mode "single user").
Il est ainsi possible de configurer plusieurs run levels fonctionnant différemment : les niveaux utilisés sans redémarrer ou arrêter la machine sont donc de deux à cinq, et il est possible de passer de l'un à l'autre.
Pour passer d'un run level à l'autre, une commande comme "init X" suffit (X étant le niveau d'exécution choisi).
Le run level par défaut au démarrage est défini dans le fichier /etc/inittab.
Il est également possible de déterminer dans la commande de démarrage quel run level doit démarrer, simplement en ajoutant son chiffre à la suite de la commande d'initialisation du système.
Notons qu'il n'y a pas de hiérarchie ni de chronologie dans les run levels (il n'est pas nécessaire de passer par 3 pour aller de 2 à 4, par exemple).
Configuration
Pour définir le run level par défaut, il faut mettre une ligne comme
id:5:initdefault: (ici, le run level 5)
dans le fichier /etc/inittab.
Il est préférable de ne jamais mettre 0 ou 6 comme valeur numérique !
Organisation "à la System V"
Dans ce type d'organisation, très répandu de nos jours (distributions Red Hat, Debian, etc), les scripts de lancement des applications sont regroupés dans un répertoire commun
/etc/init.d. Ces scripts reçoivent un paramètre qui peut être
start,
stop,
restart, etc. Ils ont généralement la structure suivante :
#!/bin/sh
case $1 in
start) ...
# commandes pour démarrer le service
....
;;
stop)
# commandes pour arrêter le service
....
;;
restart)
$0 stop
sleep 1
$0 start
;;
esac
À chaque niveau correspond un répertoire (typiquement /etc/rc.d/rc2.d pour le niveau 2) de liens symboliques vers des fichiers de /etc/init.d. Ces liens symboliques portent des noms commençant par la lettre S ou K, suivi d'un numéro sur deux chiffres.
Lors d'un changement de run level (commandes init et telinit)
- les scripts dont le nom commence par un K dans le répertoire correspondant au niveau courant sont lancés (dans l'ordre des numéros) avec le parametre stop, ce qui a normalement pour effet d'arrêter le service correspondant.
- les scripts du nouveau niveau qui commencent par S sont activés avec le paramêtre start.
Signification conventionnelle des run level
Les run levels ne sont pas tous normalisés.
Les run levels standard
- 0 : Arrêt
- 1 : Mode monoutilisateur
- 6 : Redémarrage
Toutes les distributions basées sur
Debian, comme
Ubuntu, ne font aucune distinction entre les runlevels allant de 2 à 5. Voir pour cela la FAQ de Debian au démarrage.
- 0 : Arrêt
- 1 : Mode monoutilisateur
- 2 à 5 : Mode multiutilisateur complet avec serveur graphique si installé.
- 6 : Redémarrage
Les run levels type RedHat (Mandriva, etc.)
- 0 : Arrêt
- 1 : Mode monoutilisateur
- 2 : Mode multiutilisateur (sans la couche réseau)
- 3 : Mode multiutilisateur (avec la couche réseau)
- 4 : Inutilisé
- 5 : Mode multiutilisateur avec serveur graphique
- 6 : Redémarrage
Article connexe