← Sommaire SkyLinux

Leçon 85 : Les targets systemd (runlevels)

Les targets systemd sont l'équivalent moderne des runlevels (niveaux d'exécution) du système SysVinit. Elles permettent de définir un état particulier du système — par exemple un système multi-utilisateurs avec réseau, ou un système en mode rescue. Comprendre les targets est essentiel pour maîtriser le démarrage et la gestion des services sous Linux.

📖 Comprendre les targets

Sous SysVinit, le système démarrait dans l'un des runlevels 0 à 6. Chaque runlevel déclenchait un ensemble de services. Systemd remplace ce mécanisme par des targets, qui sont des groupes d'unités (services, sockets, mounts...) devant être actifs simultanément.

Targets principales

TargetÉquivalent SysVDescription
poweroff.targetRunlevel 0Arrêt complet du système
rescue.targetRunlevel 1 / SMode rescue (single user)
multi-user.targetRunlevel 2, 3, 4, 5Multi-utilisateurs, sans interface graphique
graphical.targetRunlevel 5Multi-utilisateurs avec interface graphique
reboot.targetRunlevel 6Redémarrage du système
emergency.target-Mode emergency (shell minimal)
default.target-Target par défaut (généralement graphical.target)

🔧 Commandes de base

Voir le runlevel actuel

systemctl get-default

Affiche la target par défaut vers laquelle le système démarre.

Définir la target par défaut

sudo systemctl set-default multi-user.target
sudo systemctl set-default graphical.target

Configure le système pour démarrer en mode texte ou avec interface graphique.

Changer de target à chaud

sudo systemctl isolate multi-user.target

Passe immédiatement dans la target spécifiée, sans redémarrer. Tous les services non requis par la nouvelle target sont arrêtés.

Lister les targets disponibles

systemctl list-units --type=target --all

Affiche toutes les targets connues sur le système, avec leur état.

Isoler une target au démarrage

Au démarrage, dans le menu GRUB, ajoutez systemd.unit=multi-user.target au noyau pour démarrer en mode texte.

💡 Relations entre targets

Voir les dépendances d'une target

systemctl list-dependencies graphical.target

Affiche l'arbre complet des unités requises par la target. Très utile pour comprendre pourquoi un service ne démarre pas.

Voir les unités activées par une target

systemctl list-unit-files --type=target

Liste toutes les target-units installées sur le système.

Vérifier l'état actuel

systemctl list-units --type=target

Affiche les targets actuellement actives sur le système.

🔍 Targets et emergency/rescue

Mode rescue

sudo systemctl rescue

Passe en mode rescue. Tous les services sont arrêtés sauf ceux essentiels. Équivalent de init 1.

Mode emergency

sudo systemctl emergency

Mode plus minimal encore que rescue. Monte uniquement le root filesystem en lecture seule. Très utile pour diagnostiquer des problèmes de démarrage.

Arrêter ou redémarrer

sudo systemctl poweroff
sudo systemctl reboot

Équivalents de halt et reboot, mais via systemd.

📝 Créer une target personnalisée

Fichier .target

sudo nano /etc/systemd/system/mon-service.target

Exemple minimal :

[Unit] Description=Ma target personnalisée Documentation=https://example.com After=network-online.target Wants=network-online.target [Install] WantedBy=multi-user.target

Activer la target

sudo systemctl daemon-reload
sudo systemctl enable mon-service.target

🆚 Targets vs Runlevels : tableau comparatif

AspectSysVinit (runlevels)systemd (targets)
DéfinitionScripts shell numérotés (0-6)Fichiers .target avec dépendances
Commande de changementinit 3systemctl isolate multi-user.target
ParallélismeSéquentielParallèle (plus rapide)
ConfigurationRépertoires /etc/rc.d/Fichiers dans /etc/systemd/
ActivationLiens symboliques /etc/rc.d/rc3.d/Directive WantedBy= dans l'unité

📝 Exercices pratiques

Exercice 1

Découvrez quelle est la target par défaut de votre système :

systemctl get-default

Exercice 2

Listez toutes les targets actuellement actives :

systemctl list-units --type=target

Exercice 3

Découvrez les services dépendants de la target multi-user.target :

systemctl list-dependencies multi-user.target

Exercice 4

Passez temporairement en mode rescue (avec sudo) pour voir la différence :

sudo systemctl isolate rescue.target

Puis revenez avec sudo systemctl isolate graphical.target ou sudo systemctl isolate multi-user.target.

Exercice 5

Vérifiez si graphical.target dépend bien de multi-user.target :

systemctl list-dependencies graphical.target | grep multi-user

🔗 Commandes liées

📚 Pour aller plus loin

Les targets systemd offrent une flexibilité bien supérieure aux runlevels SysVinit. Chaque target peut dépendre d'autres targets, créant un graphe de dépendances résolu en parallèle par systemd. Cela réduit considérablement le temps de démarrage par rapport à l'approche séquentielle de SysVinit.

Le fichier /lib/systemd/system/graphical.target est équippé de Wants=multi-user.target, ce qui signifie que graphical.target "veut" que multi-user.target soit actif — mais multi-user peut fonctionner seul, tandis que graphical ne le peut pas.

Pour les machines sans interface graphique (serveurs), privilégiez multi-user.target comme target par défaut. C'est plus léger et plus rapide à démarrer.