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.
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.
| Target | Équivalent SysV | Description |
|---|---|---|
poweroff.target | Runlevel 0 | Arrêt complet du système |
rescue.target | Runlevel 1 / S | Mode rescue (single user) |
multi-user.target | Runlevel 2, 3, 4, 5 | Multi-utilisateurs, sans interface graphique |
graphical.target | Runlevel 5 | Multi-utilisateurs avec interface graphique |
reboot.target | Runlevel 6 | Redémarrage du système |
emergency.target | - | Mode emergency (shell minimal) |
default.target | - | Target par défaut (généralement graphical.target) |
systemctl get-defaultAffiche la target par défaut vers laquelle le système démarre.
sudo systemctl set-default multi-user.targetsudo systemctl set-default graphical.targetConfigure le système pour démarrer en mode texte ou avec interface graphique.
sudo systemctl isolate multi-user.targetPasse immédiatement dans la target spécifiée, sans redémarrer. Tous les services non requis par la nouvelle target sont arrêtés.
systemctl list-units --type=target --allAffiche toutes les targets connues sur le système, avec leur état.
Au démarrage, dans le menu GRUB, ajoutez systemd.unit=multi-user.target au noyau pour démarrer en mode texte.
systemctl list-dependencies graphical.targetAffiche l'arbre complet des unités requises par la target. Très utile pour comprendre pourquoi un service ne démarre pas.
systemctl list-unit-files --type=targetListe toutes les target-units installées sur le système.
systemctl list-units --type=targetAffiche les targets actuellement actives sur le système.
sudo systemctl rescuePasse en mode rescue. Tous les services sont arrêtés sauf ceux essentiels. Équivalent de init 1.
sudo systemctl emergencyMode plus minimal encore que rescue. Monte uniquement le root filesystem en lecture seule. Très utile pour diagnostiquer des problèmes de démarrage.
sudo systemctl poweroffsudo systemctl rebootÉquivalents de halt et reboot, mais via systemd.
sudo nano /etc/systemd/system/mon-service.targetExemple minimal :
[Unit]
Description=Ma target personnalisée
Documentation=https://example.com
After=network-online.target
Wants=network-online.target
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reloadsudo systemctl enable mon-service.target| Aspect | SysVinit (runlevels) | systemd (targets) |
|---|---|---|
| Définition | Scripts shell numérotés (0-6) | Fichiers .target avec dépendances |
| Commande de changement | init 3 | systemctl isolate multi-user.target |
| Parallélisme | Séquentiel | Parallèle (plus rapide) |
| Configuration | Répertoires /etc/rc.d/ | Fichiers dans /etc/systemd/ |
| Activation | Liens symboliques /etc/rc.d/rc3.d/ | Directive WantedBy= dans l'unité |
Découvrez quelle est la target par défaut de votre système :
systemctl get-defaultListez toutes les targets actuellement actives :
systemctl list-units --type=targetDécouvrez les services dépendants de la target multi-user.target :
systemctl list-dependencies multi-user.targetPassez temporairement en mode rescue (avec sudo) pour voir la différence :
sudo systemctl isolate rescue.targetPuis revenez avec sudo systemctl isolate graphical.target ou sudo systemctl isolate multi-user.target.
Vérifiez si graphical.target dépend bien de multi-user.target :
systemctl list-dependencies graphical.target | grep multi-usersystemctl — Gestion des services et targets (voir Leçon 21)systemctl daemon-reload — Recharger la configuration (voir Leçon 59)journalctl — Explorer les logs systemd (voir Leçon 49)systemd-analyze — Analyser le temps de démarrage (voir Leçon 35)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.