Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

9.3. Travailler avec des cibles Systemd

Les versions précédentes de Red Hat Enterprise Linux, qui étaient distribuées avec SysV init ou Upstart, implémentaient un ensemble prédéfini de niveaux d'exécution (« runlevels ») qui représentaient des modes d'opération spécifiques. Ces niveaux d'exécution étaient numérotés de 0 à 6 et étaient définis par une sélection de services système à exécuter lorsqu'un niveau d'exécution particulier était activé par l'administrateur systèmes. Sur Red Hat Enterprise Linux 7, le concept des niveaux d'exécution a été remplacé par les cibles Systemd.
Les cibles Systemd sont représentées par des unités de cible (« target units »). Les unités de cible se terminent par l'extension de fichier .target et leur unique but consiste à regrouper d'autres unités Systemd dans une chaîne de dépendances. Par exemple, l'unité graphical.target, qui est utilisée pour lancer une session graphique, lance des services système comme le gestionnaire d'affichage GNOME (gdm.service) ou le services des comptes (accounts-daemon.service) et active également l'unité multi-user.target. De manière similaire, l'unité multi-user.target lance d'autres services système essentiels, tels que NetworkManager (NetworkManager.service) ou D-Bus (dbus.service) et active une autre unité cible nommée basic.target.
Red Hat Enterprise Linux 7 est distribué avec un certain nombre de cibles prédéfinies plus ou moins similaires à l'ensemble standard des niveaux d'exécution des versions précédentes de ce système. Pour des raisons de compatibilité, des alias sont également fournis pour ces cibles, et les font correspondre directement aux niveaux d'exécution SysV. La Tableau 9.6, « Comparaison des niveaux d'exécution SysV avec les cibles Systemd » offre une liste complète des niveaux d'exécution SysV et des cibles Systemd correspondantes.

Tableau 9.6. Comparaison des niveaux d'exécution SysV avec les cibles Systemd

Niveau d'exécutionUnités de cibleDescription
0runlevel0.target, poweroff.targetQuitter et éteindre le système.
1runlevel1.target, rescue.targetInstaller un shell de secours.
2runlevel2.target, multi-user.targetInstaller un système multi-utilisateurs non graphique.
3runlevel3.target, multi-user.targetInstaller un système multi-utilisateurs non graphique.
4runlevel4.target, multi-user.targetInstaller un système multi-utilisateurs non graphique.
5runlevel5.target, graphical.targetInstaller un système graphique multi-utilisateurs.
6runlevel6.target, reboot.targetQuitter et redémarrer le système.
Pour afficher, modifier, ou configurer des cibles Systemd, veuillez utiliser l'utilitaire systemctl comme décrit dans la Tableau 9.7, « Comparaison des commandes SysV init avec systemctl » ainsi que dans les sections ci-dessous. Les commandes runlevel et telinit sont toujours disponibles dans le système et fonctionnent comme prévu, mais ne sont incluses que pour des raisons de compatibilité et doivent être évitées.

Tableau 9.7. Comparaison des commandes SysV init avec systemctl

Ancienne commandeNouvelle commandeDescription
runlevelsystemctl list-units --type targetRépertorie les unités de cible actuellement chargées.
telinit runlevelsystemctl isolate name.targetModifie la cible actuelle.

9.3.1. Afficher la cible par défaut

Pour déterminer l'unité de cible qui est utilisée par défaut, veuillez exécuter la commande suivante :
systemctl get-default
Cette commande résout le lien symbolique situé sur /etc/systemd/system/default.target et affiche le résultat. Pour obtenir des informations sur comment modifier la cible par défaut, veuillez consulter la Section 9.3.3, « Modifier la cible par défaut ». Pour obtenir des informations sur comment répertorier toutes les unités de cible actuellement chargées, veuillez consulter la Section 9.3.2, « Afficher la cible actuelle ».

Exemple 9.10. Afficher la cible par défaut

Pour afficher l'unité cible par défaut, veuillez saisir :
~]$ systemctl get-default
graphical.target

9.3.2. Afficher la cible actuelle

Pour répertorier toutes les unités de cible actuellement chargées, veuillez saisir la commande suivante dans une invite de shell :
systemctl list-units --type target
Cette commande affiche le nom complet de chaque unité de cible (UNIT) suivi d'une note indiquant si l'unité a été chargée (LOAD), son état d'activation de haut niveau (ACTIVE) et de bas niveau (SUB), ainsi qu'une courte description (DESCRIPTION).
Par défaut, la commande systemctl list-units affiche uniquement les unités actives. Si vous souhaitez afficher toutes les unités chargées, quel que soit leur état, veuillez exécuter cette commande avec l'option de ligne de commande --all ou -a :
systemctl list-units --type target --all
Veuillez consulter la Section 9.3.1, « Afficher la cible par défaut » pour obtenir des informations sur la manière d'afficher la cible par défaut. Pour obtenir des informations sur la manière de modifier la cible actuelle, veuillez consulter la Section 9.3.4, « Modifier la cible actuelle ».

Exemple 9.11. Afficher la cible actuelle

Pour répertorier toutes les unités de cible actuellement chargées, veuillez exécuter la commande suivante :
~]$ systemctl list-units --type target
UNIT                  LOAD   ACTIVE SUB    DESCRIPTION
basic.target          loaded active active Basic System
cryptsetup.target     loaded active active Encrypted Volumes
getty.target          loaded active active Login Prompts
graphical.target      loaded active active Graphical Interface
local-fs-pre.target   loaded active active Local File Systems (Pre)
local-fs.target       loaded active active Local File Systems
multi-user.target     loaded active active Multi-User System
network.target        loaded active active Network
paths.target          loaded active active Paths
remote-fs.target      loaded active active Remote File Systems
sockets.target        loaded active active Sockets
sound.target          loaded active active Sound Card
spice-vdagentd.target loaded active active Agent daemon for Spice guests
swap.target           loaded active active Swap
sysinit.target        loaded active active System Initialization
time-sync.target      loaded active active System Time Synchronized
timers.target         loaded active active Timers

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

17 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

9.3.3. Modifier la cible par défaut

Pour configurer le système de manière à utiliser une unité de cible différente par défaut, veuillez saisir ce qui suit dans une invite de shell en tant qu'utilisateur root :
systemctl set-default name.target
Veuillez remplacer name par le nom de l'unité de cible que vous souhaitez utiliser par défaut (par exemple, multi-user). Cette commande remplace le fichier /etc/systemd/system/default.target par un lien symbolique pointant vers /usr/lib/systemd/system/name.target, où name est le nom de l'unité cible que vous souhaitez utiliser. Pour obtenir davantage d'informations sur la manière de modifier la cible actuelle, veuillez consulter la Section 9.3.4, « Modifier la cible actuelle ». Pour obtenir des informations sur la manière de répertorier toutes les unités de cible actuellement chargées, veuillez consulter la Section 9.3.2, « Afficher la cible actuelle ».

Exemple 9.12. Modifier la cible par défaut

Pour configurer le système de manière à utiliser l'unité multi-user.target par défaut, veuillez saisir la commande suivante dans une invite de shell en tant qu'utilisateur root :
~]# systemctl set-default multi-user.target
rm '/etc/systemd/system/default.target'
ln -s '/usr/lib/systemd/system/multi-user.target' '/etc/systemd/system/default.target'

9.3.4. Modifier la cible actuelle

Pour passer à une unité de cible différente dans la session actuelle, veuillez saisir ce qui suit dans l'invite de shell en tant qu'utilisateur root :
systemctl isolate name.target
Veuillez remplacer name par le nom de l'unité de cible que vous souhaitez utiliser par défaut (par exemple, multi-user). Cette commande remplace l'unité de cible nommée name et toutes ses unités dépendantes, et arrête immédiatement toutes les autres. Pour obtenir des informations sur la manière de modifier la cible par défaut, veuillez consulter la Section 9.3.3, « Modifier la cible par défaut ». Pour obtenir des informations sur la manière de répertorier toutes les unités de cible actuellement chargées, veuillez consulter la Section 9.3.2, « Afficher la cible actuelle ».

Exemple 9.13. Modifier la cible actuelle

Pour éteindre l'interface utilisateur graphique et modifier l'unité en multi-user.target dans la session actuelle, veuillez saisir la commande suivante en tant qu'utilisateur root :
~]# systemctl isolate multi-user.target

9.3.5. Passer en mode de secours

Le mode de secours (« Rescue mode ») fournit un environnement simple utilisateur pratique, et vous permet de réparer votre système dans les cas où il est impossible d'effectuer un processus de démarrage normal. En mode de secours, le système tente de monter tous les systèmes de fichiers locaux et de lancer plusieurs services système importants, mais n'active pas d'interface réseau ou ne permet pas à d'autres d'utilisateurs de se connecter au système au même moment. Sur Red Hat Enterprise Linux 7, le mode de secours est équivalent au mode utilisateur seul (single user mode) et requiert le mot de passe root.
Pour modifier la cible actuelle et entrer en mode de secours dans la session actuelle, veuillez saisir ce qui suit dans l'invite de shell en tant qu'utilisateur root :
systemctl rescue
Cette commande est similaire à systemctl isolate rescue.target, mais elle envoie également un message informatif à tous les utilisateurs actuellement connectés au système. Pour empêcher Systemd d'envoyer ce message, veuillez exécuter cette commande avec l'option de ligne de commande --no-wall :
systemctl --no-wall rescue
Pour obtenir des informations sur la manière d'entrer en mode d'urgence, veuillez consulter Section 9.3.6, « Passer en mode d'urgence ».

Exemple 9.14. Passer en mode de secours

Pour entrer en mode de secours dans la session actuelle, veuillez exécuter la commande suivante en tant qu'utilisateur root :
~]# systemctl rescue

Broadcast message from root@localhost on pts/0 (Fri 2013-10-25 18:23:15 CEST):

The system is going down to rescue mode NOW!

9.3.6. Passer en mode d'urgence

Le mode d'urgence (« Emergency mode ») fournit l'environnement le plus minimaliste possible et vous permet de réparer votre système même dans des situations où le système est incapable d'entrer en mode de secours. Dans le mode d'urgence, le système monte le système de fichiers root uniquement en lecture, il ne tentera pas de monter d'autre système de fichiers locaux, n'activera pas d'interface réseau et lancera quelques services essentiels. Sur Red Hat Enterprise Linux 7, le mode d'urgence requiert le mot de passe root.
Pour modifier la cible actuelle et entrer en mode d'urgence dans la session actuelle, veuillez saisir ce qui suit dans l'invite de shell en tant qu'utilisateur root :
systemctl emergency
Cette commande est similaire à systemctl isolate emergency.target, mais elle envoie également un message informatif à tous les utilisateurs actuellement connectés au système. Pour empêcher Systemd d'envoyer ce message, veuillez exécuter cette commande avec l'option de ligne de commande --no-wall :
systemctl --no-wall emergency
Pour obtenir des informations sur la manière d'entrer en mode de secours, veuillez consulter Section 9.3.5, « Passer en mode de secours ».

Exemple 9.15. Passer en mode d'urgence

Pour entrer en mode d'urgence sans envoyer de message à tous les utilisateurs actuellement connectés au système, veuillez exécuter la commande suivante en tant qu'utilisateur root :
~]# systemctl --no-wall emergency