NOM¶
init, telinit - Initialisation du contrôle des processus
SYNOPSIS¶
/sbin/init [
-a ] [
-s ] [
-b ] [
-z
xxx ] [
0123456Ss ]
/sbin/telinit [
-t SECONDES ] [
0123456sSQqabcUu ]
/sbin/telinit [
-e VAR[
=VAL] ]
DESCRIPTION¶
Init¶
init est le parent de tous les processus. Son rôle principal est
de créer des processus à partir d'un script stocké dans
/etc/inittab (consultez
inittab(5)). Ce fichier comporte
généralement des entrées qui forcent
init à
lancer des
getty sur chacune des lignes sur lesquelles des utilisateurs
peuvent se connecter. Il contrôle également des processus
autonomes nécessaires pour chaque système particulier.
NIVEAUX D'EXÉCUTION¶
Un
niveau d'exécution est une configuration logicielle du
système qui permet à seulement un certain groupe de processus
d'exister. Les processus lancés par
init pour chacun de ces
niveaux d'exécution sont définis dans le fichier
/etc/inittab.
init peut être dans un des huit niveaux
d'exécution :
0–6 et
S (alias
s). Le
niveau d'exécution peut être modifié par un
superutilisateur en exécutant
telinit, qui envoie les signaux
appropriés à
init, lui indiquant dans quel niveau
d'exécution se placer.
Les niveaux d'exécution
S,
0,
1 et
6 sont
réservés. Le niveau d'exécution S est utilisé pour
initialiser le système au démarrage. Lors du lancement du niveau
d'exécution S (au démarrage) ou 1 (depuis un niveau
d'exécution multiutilisateur), le système entre en
« mode mono-utilisateur », après lequel le
niveau d'exécution est S. Le niveau d'exécution 0 est
utilisé pour arrêter le système ; le niveau
d'exécution 6 sert au redémarrage du système.
Après avoir démarré dans le niveau S, le système
entre automatiquement dans un des niveaux multiutilisateurs 2 à 5,
à moins qu'il n'y ait eu des problèmes qui nécessitent
une correction de la part d'un administrateur en mode mono-utilisateur.
Normalement, après être entré en mode mono-utilisateur,
un administrateur effectue la maintenance puis redémarre le
système.
Pour plus d'informations, voir les pages de manuel de
shutdown(8) et
inittab(5).
Les niveaux d'exécution 7 à 9 sont également valables, mais
pas vraiment documentés. La raison pour cela est que les UNIX
« traditionnels » ne les utilisent pas.
Les niveaux d'exécution
S et
s sont équivalents. Ils
sont considérés en interne comme des alias vers les mêmes
niveaux.
DÉMARRAGE¶
Après qu'
init ait été appelé comme
dernière étape de la séquence de démarrage du
noyau, il regarde dans le fichier
/etc/inittab pour voir s'il y a une
entrée du type
initdefault (consultez
inittab(5)).
L'entrée
initdefault détermine le niveau
d'exécution initial du système. S'il n'y a pas de telle
entrée (ou pas de
/etc/inittab du tout), un niveau
d'exécution doit être entré sur la console
système.
Les niveaux d'exécution
S ou
s initialisent le
système et ne nécessitent pas de fichier
/etc/inittab.
En mode mono-utilisateur,
/sbin/sulogin est invoqué sur
/dev/console.
Quand il entre en mode mono-utilisateur,
init initialise les
paramètres des consoles
stty à des valeurs saines. Le
mode clocal est configuré. La vitesse matérielle et le mode
d'établissement d'une liaison ne sont pas changés.
Quand il entre en mode multi-utilisateurs pour la première fois,
init exécute les entrées
boot et
bootwait
pour permettre aux systèmes de fichiers de se monter avant que les
utilisateurs puissent se connecter. Ensuite, toutes les entrées
correspondant au niveau d'exécution sont exécutées.
Lorsqu'il démarre un nouveau processus,
init vérifie
d'abord si le fichier
/etc/initscript existe. S'il existe, il utilise
ce fichier pour démarrer le processus.
Chaque fois qu'un fils se termine,
init enregistre cela et la raison pour
laquelle il est mort dans
/var/run/utmp et
/var/log/wtmp, si ces
fichiers existent.
CHANGEMENT DE NIVEAU D'EXÉCUTION¶
Après qu'il ait exécuté tous les processus indiqués,
init attend qu'un de ses fils meure, qu'un signal indiquant une perte
de puissance arrive ou qu'un signal de
telinit lui indique qu'il faut
changer le niveau d'exécution du système. Quand une de ces trois
conditions se produit, il réexamine le fichier
/etc/inittab. De
nouvelles entrées peuvent être ajoutées à ce
fichier à n'importe quel moment. Cependant,
init attend qu'une
de ces conditions se produise. Pour que le fichier soit pris en compte
immédiatement, la commande
telinit Q ou
q permet de
réveiller
init pour qu'il réexamine le fichier
/etc/inittab.
Si
init n'est pas en mode mono-utilisateur et reçoit un signal
indiquant une perte de puissance (SIGPWR), il lit le fichier
/etc/powerstatus. Il démarre ensuite une commande en fonction du
contenu de ce fichier :
- F(AIL) (échec)
- Plus d'alimentation, l'UPS fournit la puissance. Exécuter les
entrées powerwait et powerfail.
- O(K)
- L'alimentation a été rétablie, exécuter les
entrées powerokwait.
- L(OW) (bas)
- Plus d'alimentation et le niveau de la batterie de l'UPS est faible.
Exécuter les entrées powerfailnow.
Si le fichier
/etc/powerstatus n'existe pas ou contient autre chose que
les lettres
F,
O ou
L,
init se comportera comme si
la lettre
F y avait été lue.
L'utilisation de
SIGPWR et de
/etc/powerstatus n'est pas
conseillée. Pour interagir avec
init il vaut mieux utiliser le
canal de contrôle
/run/initctl ; consultez le code source
de
sysvinit pour plus de documentation à ce sujet.
Quand on demande à
init de changer de niveau d'exécution,
il envoie le signal d'avertissement
SIGTERM à tous les processus
qui ne sont pas définis dans le nouveau niveau d'exécution. Il
attend ensuite 5 secondes avant de forcer l'arrêt de ces
processus avec le signal -1
SIGKILL . Notez que
init
suppose que tous ces processus (et leurs fils) restent dans le même
groupe de processus que
init a créé pour eux. Si un
processus change son affiliation à un groupe de processus, il ne
recevra pas ces signaux. Ces processus doivent être
arrêtés séparément.
TELINIT¶
/sbin/telinit est un lien vers
/bin/init. Il prend un
paramètre d'un caractère et signale à
init
d'effectuer l'action appropriée. Les paramètres suivants servent
de directive à
telinit :
- 0,1,2,3,4,5 ou 6
- Demander à init de passer au niveau d'exécution
spécifié.
- a,b,c
- Demander à init de ne traiter que les entrées du
fichier /etc/inittab du niveau d'exécution a,
b ou c.
- Q ou q
- Demander à init de réexaminer le fichier
/etc/inittab.
- S ou s
- Demander à init de passer en mode mono-utilisateur
- U ou u
- Demander à init de se relancer lui-même (en
préservant son état). Le fichier /etc/inittab n'est
pas réexaminé. Le niveau d'exécution doit être
un des niveaux Ss0123456, sinon la requête est
ignorée silencieusement.
telinit peut demander à
init combien de temps il devrait
attendre entre l'envoi des signaux SIGTERM et SIGKILL aux processus. La valeur
par défaut est de 5 secondes, mais peut être
changée avec l'option
-t.
telinit -e demande à
init de changer l'environnement des
processus qu'il lance. Le paramètre de
-e est soit de la forme
VAR=
VAL, qui positionne la variable
VAR à la
valeur
VAL, ou de la forme
VAR (sans signe égal), qui
retire la variable
VAR.
telinit ne peut être appelé que par les utilisateurs avec
les droits appropriés.
Le binaire
init vérifie s'il s'agit d'
init ou de
telinit en fonction de l'identifiant du processus ; le
véritable
init a toujours un identifiant égal à
1. Grâce à cela,
init peut également
être appelé au lieu de
telinit, comme raccourci.
ENVIRONNEMENT¶
init configure les variables d'environnement suivantes pour tous ses
fils :
- PATH
- /bin:/usr/bin:/sbin:/usr/sbin
- INIT_VERSION
- Comme le nom l'indique. Utile pour déterminer si un script est
exécuté directement par init.
- RUNLEVEL
- Le niveau d'exécution actuel du système.
- PREVLEVEL
- Le niveau d'exécution précédent (utile après
un changement de niveau d'exécution).
- CONSOLE
- La console système. Cela provient du noyau ; cependant si
elle n'existe pas, init la positionne à /dev/console
par défaut.
ATTRIBUTS D'AMORÇAGE¶
Un certain nombre d'options peuvent être fournies à
init
à partir du gestionnaire de démarrage (par exemple LILO).
init accepte les options suivantes :
- -s, S, single
- Démarrage en mode mono-utilisateur. Dans ce mode,
/etc/inittab est examiné et les scripts rc de
démarrage sont généralement lancés avant que
l'interpréteur de commande du mono-utilisateur ne commence.
- 1-5
- Niveau d'exécution dans lequel il faut démarrer.
- -b, emergency
- Démarrage direct d'un interpréteur de commande en mode
mono-utilisateur sans lancer aucun autre script de démarrage.
- -a, auto
- Le gestionnaire de démarrage LILO ajoute le mot
« auto » sur la ligne de commande pour les
démarrages utilisant la ligne de commande par défaut (sans
intervention d'un utilisateur). Dans ce cas, init positionne la
variable d'environnement AUTOBOOT à la valeur
« yes ». Notez que vous ne pouvez utiliser
cela à des fins sécuritaires ; un utilisateur pouvant
bien sûr indiquer « auto » ou ajouter
l'option -a lui-même sur la ligne de commande.
- -z xxx
- Le paramètre de -z est ignoré. Vous pouvez utiliser
cela pour étendre légèrement la ligne de commande,
pour qu'elle prenne plus de place sur la pile. init peut ensuite
manipuler la ligne de commande de telle sorte que ps(1) affiche le
niveau d'exécution actuel.
INTERFACE¶
init écoute sur une
fifo dans /run,
/run/initctl
dans l'attente de messages.
telinit utilise cela pour communiquer avec
init. L'interface n'est pas très documentée ou finalisée.
Les personnes intéressées devraient étudier le fichier
initreq.h dans le sous-répertoire
src/ de l'archive tar
des sources d'
init.
SIGNAUX¶
init réagit à plusieurs signaux :
- SIGHUP
- Identique à telinit q.
- SIGUSR1
- Lors de la réception de ces signaux, init ferme et réouvre
sa fifo de contrôle, /run/initctl.
- SIGINT
- Normalement le noyau envoie ce signal à init à la
combinaison de touches Ctrl-Alt-Suppr. Cela active l'action
ctrlaltdel.
- SIGWINCH
- Le noyau envoie ce signal quand la touche KeyboardSignal est
pressée. Cela active l'action kbrequest.
init est compatible avec l'init de Système V. Il collabore
étroitement avec les scripts des répertoires
/etc/init.d
et
/etc/rc{niveau_exécution}.d. Si votre système utilise
cette convention, il devrait y avoir un fichier
README dans le
répertoire
/etc/init.d qui explique comment ces scripts
fonctionnent.
FICHIERS¶
/etc/inittab
/etc/initscript
/dev/console
/var/run/utmp
/var/log/wtmp
/run/initctl
AVERTISSEMENTS¶
init suppose que les processus et leurs descendants restent dans le
même groupe de processus créé initialement pour eux. Si
les processus changent leur groupe,
init ne peut pas les tuer et cela
peut conduire à avoir deux processus qui lisent la même ligne de
terminal.
Sur un système Debian, entrer dans le niveau d'exécution 1 force
tous les processus à être tués à l'exception des
threads du noyau et du script qui s'occupe de tuer les autres processus ainsi
que les autres processus de sa session. En conséquence, il n'est pas
sûr de passer du niveau d'exécution 1 vers un niveau
d'exécution multi-utilisateur : les démons qui
étaient démarrés dans le niveau d'exécution S et
qui sont nécessaires au bon fonctionnement ne tournent plus. Le
système devrait être redémarré.
DIAGNOSTIC¶
Si
init trouve qu'il n'arrête pas de relancer une entrée
(plus de dix fois en deux minutes), il supposera qu'il y a une erreur dans la
commande, générera une erreur sur la console système et
refusera de relancer cette entrée à moins que cinq minutes se
soient écoulées ou qu'il ait reçu un signal. Cela permet
d'éviter de consommer des ressources système quand quelqu'un a
fait une faute de frappe dans le fichier
/etc/inittab ou que le
programme de l'entrée a été supprimé.
AUTEUR¶
Miquel van Smoorenburg (miquels@cistron.nl), page de manuel originelle de
Michael Haardt (u31b3hs@pool.informatik.rwth-aachen.de).
VOIR AUSSI¶
getty(1),
login(1),
sh(1),
runlevel(8),
shutdown(8),
kill(1),
inittab(5),
initscript(5),
utmp(5)
TRADUCTION¶
La traduction de cette page de manuel est maintenue par les membres de la liste
<debian-l10n-french AT lists DOT debian DOT org>. Veuillez signaler
toute erreur de traduction par un rapport de bogue sur le paquet
manpages-fr-extra.