Debian init runlevels

Auparavant, lorsque vous avez démarré la plupart des linux, vous démarriez dans le niveau d'exécution 6, à less que vous n'ayez fait quelque chose pendant le bootloading pour modifier le niveau d'exécution.

Le process chercherait alors dans /etc/init/rcX.d (IIRC) où X était le niveau d'exécution, et exécuterait tous les scripts commençant par S dans l'ordre sortingé par dictionary (donc S01xxx a couru avant S20yyy).

Lorsque vous avez passé la procédure d'arrêt, les scripts commençant par K seront exécutés et l'IIRC dans l'ordre inverse de sorting du dictionary.

Maintenant, les choses ont changé les directorys rcX.d ont été déplacés vers / etc et un /etc/rcS.d a été ajouté, et le niveau d'exécution par défaut est 2.

Malheureusement jusqu'à présent, je n'ai pas suivi les changements. Quelqu'un peut-il décrire le process de démarrage et d'arrêt du runlevel 2 dans les systèmes actuels?

Lorsque le système passe d'un niveau d'exécution à l'autre, il exécute tous les scripts "K" du niveau d'exécution existant, dans l'ordre, puis tous les scripts "S" du nouveau niveau d'exécution, dans l'ordre. Debian implémente le démarrage parallèle, de sorte que la plupart des scripts s'exécuteront simultanément (mais efficacement dans l'ordre), et il existe une norme pour inclure des informations de dépendance sur chaque script et des outils pour insert / supprimer des scripts. Vous pouvez désactiver la concurrency en ajoutant CONCURRENCY=NONE à /etc/default/rcS .

Sur l' inittab actuel de Debian, la command définie pour s'exécuter à chaque transition de niveau d'exécution est /etc/init.d/rc

Lorsque vous démarrez, le système est considéré dans le niveau d'exécution S Les scripts "S" dans /etc/rcS.d sont exécutés, dans l'ordre (par /etc/init.d/rc ).

Lorsqu'ils sont terminés, le système est déplacé dans le niveau d'exécution que vous avez spécifié sur la command line du kernel, ou le niveau d'exécution par défaut, qui est de 2 si vous n'avez pas installé X.

Il n'y a pas de scripts "K" dans /etc/rcS.d donc rien ne se passe là-bas – le niveau "S" est destiné à l'initialisation générale du système. Mais alors tous les scripts "S" dans /etc/rc2.d sont exécutés, dans l'ordre.

Une fois ceux-ci terminés, vous êtes officiellement au runlevel 2. La command /etc/init.d/rc returnne, et init spaws les getty 's qu'il est configuré de faire, et attend un signal pour changer le niveau d'exécution.

Lorsque vous arrêtez, un signal est envoyé à init . Ensuite, le système passe du niveau d'exécution 2 à 6 (redémarrage) ou 0 (arrêt). Donc, tous les scripts "K" dans /etc/rc2.d sont exécutés, dans l'ordre. Ensuite, tous les scripts "S" dans /etc/rc6.d ou /etc/rc0.d sont exécutés, dans l'ordre, s'ils existent.

Puisqu'il s'agit du niveau 0 ou 6 (voir /etc/init.d/rc – ce script teste explicitement 0 ou 6), il sortira immédiatement du niveau d'exécution, provoquant l'exécution de tous les scripts "K".

Le dernier "K" script pour 0 ou 6 sera une command qui arrête / éteint ou redémarre le système.

/ etc / inittab

Tout droit sorti de mon /etc/inittab (système Fedora):

 # Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # 

Cette ligne dans mon /etc/inittab contrôle mon runlevel par défaut:

 id:5:initdefault: 

Changez-le comme ceci:

 $ sudo vim /etc/inittab id:3:initdefault: 

runlevels

Votre niveau d'exécution actuel est le suivant:

 $ runlevel N 5 

Donc mon niveau d'exécution précédent est inconnu ( N ) et mon actuel est 5. Changez temporairement votre niveau d'exécution:

 telinit 3 

Jetez un oeil à cet article intitulé: Boot-Up Manager (docs) , qui explique comment ce directory est organisé sous Debian.

Sous Debian, il montre les niveaux d'exécution suivants:

 N System bootup (NONE). S Single user mode (not to be switched to directly) 0 halt 1 single user mode 2 - 5 multi user mode 6 reboot