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] ]
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 (voir
inittab(5)). Ce fichier comporte généralement des entrées qui force
init à lancer des getty sur chacune des lignes sur lesquelles des
utilisateurs peuvent se connecter. Il contrôle également des processus
autonomes nécessaire 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 dans le
« 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écessite une correction de la part d’un
administrateur en mode mono-utilisateur. Normalement, après être entrée
dans le 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é. 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ême 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 la fichier /etc/inittab pour voir
s’il y a une entrée du type initdefault (voir 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écessite
pas de fichier /etc/inittab.
Dans le mode mono-utilisateur, /sbin/sulogin est invoqué sur
/dev/console.
Quand il entre dans le 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 dans un mode multi-utilisateurs pour la première fois,
init exécute les entrées boot et bootwait pour permettre aux systèmes
de fichier 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 spécifiés, init attend qu’un
de ses fils meurt, 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 nouvelle entrées peuvent être
ajoutées à ce fichier à n’importe quel moment. Cependant, init attend
qu’une de ces condition 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 dans le 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é lu.
L’utilisation de SIGPWR et de /etc/powerstatus n’est pas conseillé.
Pour interagir avec init il est préférable d’utiliser le canal de
contrôle /dev/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 envoi 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
-1SIGKILL . Notez que init suppose que tous ces processus (et leur
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é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 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 il est possible également d’appeler
init au lieu de telinit, comme raccourcis.
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 courant 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.
BOOTFLAGS
Il est possible de fournir un certain nombre d’options à init depuis le
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écuter dans lequel il faut démarrer.
-b, emergency
Démarrer directement un interpréteur de commande en mode
mono-utilisateur sans lancé 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 le 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 spécifier « auto »
ou ajouter l’option -a manuellement 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 /dev, /dev/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 source 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, /dev/initctl. Ceci est utile pour les scripts de
démarrage quand /dev est remonté.
SIGINT
Normalement le noyau envoie ce signal à init quand la combinaison
CTRL-ALT-SUPPR est pressée. Ceci active l’action ctrlaltdel.
SIGWINCH
Le noyau envoie ce signal quand la touche KeyboardSignal est
pressée. Ceci active l’action kbrequest.
CONFORMITÉ
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_excution}.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
/dev/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 autre 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é dans le niveau d’exécution S et qui sont
nécessaire 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.
29 juillet 2004