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écution | Unités de cible | Description |
---|---|---|
0 | runlevel0.target , poweroff.target | Quitter et éteindre le système. |
1 | runlevel1.target , rescue.target | Installer un shell de secours. |
2 | runlevel2.target , multi-user.target | Installer un système multi-utilisateurs non graphique. |
3 | runlevel3.target , multi-user.target | Installer un système multi-utilisateurs non graphique. |
4 | runlevel4.target , multi-user.target | Installer un système multi-utilisateurs non graphique. |
5 | runlevel5.target , graphical.target | Installer un système graphique multi-utilisateurs. |
6 | runlevel6.target , reboot.target | Quitter 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 commande | Nouvelle commande | Description |
---|---|---|
runlevel | systemctl list-units --type target | Répertorie les unités de cible actuellement chargées. |
telinit runlevel | systemctl isolate name.target | Modifie 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