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 ceci 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. Ceci 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 ceci à
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 ceci 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 ceci 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. Ceci 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 10 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 5 minutes se soient
écoulées ou qu'il ait reçu un signal. Ceci 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.