systemctl enable crée un lien symbolique qui dit à systemd de démarrer un service automatiquement au prochain boot. Sans cette activation, un service installé et démarré manuellement ne survivra pas à un redémarrage. C’est l’une des premières tâches de tout administrateur après l’installation d’un service.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Activer un service pour qu’il démarre automatiquement au boot
- Vérifier l’état d’activation avec
systemctl is-enabled - Comprendre le mécanisme WantedBy et les liens symboliques
- Distinguer les états enabled, disabled, static et masked
- Combiner activation et démarrage en une seule commande
- Diagnostiquer un service qui ne s’active pas au boot
Dans quel contexte ?
Section intitulée « Dans quel contexte ? »L’activation au démarrage intervient systématiquement en administration :
- Vous installez Nginx ou Apache — le service doit redémarrer automatiquement après une maintenance ou une coupure de courant
- Vous déployez une application métier packagée comme service systemd — elle doit être disponible dès le boot
- Vous configurez sshd, firewalld ou fail2ban — ces services de sécurité doivent être actifs en permanence
- Après un reboot planifié, vous constatez qu’un service critique est arrêté — il n’était pas activé
- Vous préparez un serveur de production — chaque service doit être explicitement activé ou désactivé
Démarré vs activé — deux états indépendants
Section intitulée « Démarré vs activé — deux états indépendants »Un service systemd a deux états indépendants :
| État | Question | Commande |
|---|---|---|
| Active/Inactive | Le service tourne-t-il maintenant ? | systemctl status |
| Enabled/Disabled | Le service démarrera-t-il au prochain boot ? | systemctl is-enabled |
Ces deux états se combinent :
| Combinaison | Signification |
|---|---|
| Active + Enabled | Tourne maintenant, redémarrera au boot |
| Active + Disabled | Tourne maintenant, ne redémarrera pas au boot |
| Inactive + Enabled | Arrêté maintenant, démarrera au prochain boot |
| Inactive + Disabled | Arrêté et ne démarrera pas au boot |
Activer un service
Section intitulée « Activer un service »Activer au boot (sans démarrer maintenant)
Section intitulée « Activer au boot (sans démarrer maintenant) »sudo systemctl enable nginxCreated symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.La commande crée un lien symbolique dans le dossier de la cible multi-user.target. Au prochain boot, quand systemd atteint cette cible, il démarre tous les services liés.
Activer et démarrer en une seule commande
Section intitulée « Activer et démarrer en une seule commande »sudo systemctl enable --now nginxLe flag --now combine enable + start. C’est la méthode recommandée lors de l’installation d’un service.
Vérifier l’activation
Section intitulée « Vérifier l’activation »systemctl is-enabled nginxenabledLa commande retourne un code de sortie 0 si le service est activé, ce qui la rend utilisable dans des scripts :
if systemctl is-enabled --quiet nginx; then echo "Nginx est activé au démarrage"fiDésactiver un service
Section intitulée « Désactiver un service »Désactiver au boot (sans l’arrêter maintenant)
Section intitulée « Désactiver au boot (sans l’arrêter maintenant) »sudo systemctl disable nginxRemoved symlink /etc/systemd/system/multi-user.target.wants/nginx.service.Le lien symbolique est supprimé. Le service ne démarrera plus au boot, mais il continue de tourner si il était actif.
Désactiver et arrêter en une seule commande
Section intitulée « Désactiver et arrêter en une seule commande »sudo systemctl disable --now nginxLes états d’activation
Section intitulée « Les états d’activation »La commande systemctl is-enabled peut retourner plusieurs valeurs :
| État | Signification |
|---|---|
enabled | Activé au boot (lien symbolique présent) |
disabled | Désactivé au boot (pas de lien) |
static | Pas de section [Install] — ne peut pas être activé directement, seulement tiré comme dépendance |
masked | Bloqué — impossible à démarrer, même manuellement |
alias | Le nom est un alias vers une autre unité |
indirect | Activé indirectement par un autre service |
generated | Généré automatiquement (ex : SysV init compat) |
Services static
Section intitulée « Services static »Un service static n’a pas de section [Install] dans son fichier unité. Il ne peut pas être activé avec enable — il est conçu pour être démarré uniquement comme dépendance d’un autre service.
systemctl is-enabled systemd-tmpfiles-clean.servicestaticMasquer un service
Section intitulée « Masquer un service »Masquer un service empêche son démarrage, même manuellement :
sudo systemctl mask nginxCreated symlink /etc/systemd/system/nginx.service → /dev/null.Le lien pointe vers /dev/null — toute tentative de démarrage échoue :
sudo systemctl start nginxFailed to start nginx.service: Unit nginx.service is masked.Pour démasquer :
sudo systemctl unmask nginxComment fonctionne l’activation
Section intitulée « Comment fonctionne l’activation »L’activation repose sur la section [Install] du fichier unité :
systemctl cat nginx.service[Unit]Description=A high performance web server and a reverse proxy serverAfter=network.target
[Service]Type=forkingPIDFile=/run/nginx.pidExecStart=/usr/sbin/nginxExecReload=/bin/kill -s HUP $MAINPID
[Install]WantedBy=multi-user.target| Directive | Rôle |
|---|---|
WantedBy=multi-user.target | Quand enable est exécuté, crée un lien dans multi-user.target.wants/ |
RequiredBy= | Comme WantedBy mais avec une dépendance forte |
Also= | Active aussi d’autres unités en même temps |
Les cibles principales
Section intitulée « Les cibles principales »| Cible | Équivalent | Usage |
|---|---|---|
multi-user.target | Runlevel 3 | Serveur sans interface graphique (le plus courant) |
graphical.target | Runlevel 5 | Bureau avec interface graphique |
rescue.target | Runlevel 1 | Mode maintenance |
La grande majorité des services serveur utilisent WantedBy=multi-user.target.
Voir les services activés pour une cible
Section intitulée « Voir les services activés pour une cible »systemctl list-dependencies multi-user.target --type=serviceLister tous les services et leur état d’activation
Section intitulée « Lister tous les services et leur état d’activation »systemctl list-unit-files --type=serviceUNIT FILE STATE PRESETcron.service enabled enablednginx.service enabled enabledpostgresql.service disabled enabledcups.service masked enabledsystemd-tmpfiles-clean.service static -La colonne PRESET indique l’état par défaut défini par la distribution.
Reenabled et presets
Section intitulée « Reenabled et presets »Réactiver (recréer les liens)
Section intitulée « Réactiver (recréer les liens) »sudo systemctl reenable nginxSupprime puis recrée les liens symboliques. Utile si le fichier unité a été modifié (changement de WantedBy).
Presets de la distribution
Section intitulée « Presets de la distribution »Les distributions définissent des presets qui déterminent quel service est activé par défaut à l’installation :
systemctl preset nginxApplique le preset de la distribution. Sur Debian/Ubuntu, la plupart des services sont activés par défaut à l’installation (enabled dans PRESET).
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
| Service arrêté après reboot | enable jamais exécuté | sudo systemctl enable --now service |
Failed to enable: Unit is masked | Service masqué | sudo systemctl unmask service puis enable |
enable sans effet, pas de lien créé | Pas de section [Install] | Service static, activé via une dépendance |
is-enabled retourne indirect | Activé via un autre service | Vérifier avec systemctl show -p TriggeredBy |
| Service activé mais ne démarre pas | Erreur dans le fichier unité | journalctl -xeu service pour le diagnostic |
| Lien créé vers la mauvaise cible | WantedBy incorrect | Modifier le fichier unité et reenable |
# Diagnostic rapidesystemctl is-enabled nginx # État d'activationsystemctl cat nginx.service # Contenu du fichier unitéls -la /etc/systemd/system/multi-user.target.wants/ # Liens symboliquessystemctl list-unit-files --type=service # Vue globaleBonnes pratiques
Section intitulée « Bonnes pratiques »- Toujours utiliser
--nowlors de la mise en place :enable --nowetdisable --nowpour éviter d’oublier une des deux actions - Vérifier après un reboot — tester que les services critiques sont bien actifs après un
rebootplanifié - Désactiver explicitement les services inutiles plutôt que de les laisser installés et activés (réduction de la surface d’attaque)
- Masquer les services vraiment indésirables (cups, avahi, bluetooth sur un serveur)
- Documenter les services activés sur un serveur —
systemctl list-unit-files --state=enableddonne l’inventaire
À retenir
Section intitulée « À retenir »systemctl enablecrée un lien symbolique pour que le service démarre au boot —disablele supprime--nowcombine activation + démarrage (ou désactivation + arrêt) en une seule commande- Un service peut être actif sans être activé (et inversement) — ce sont deux états indépendants
is-enabledvérifie l’état :enabled,disabled,static,maskedmaskbloque totalement un service — plus fort quedisable- Le mécanisme repose sur la directive
WantedBydans la section[Install]du fichier unité - La plupart des services serveur utilisent
multi-user.targetcomme cible d’activation