Aller au contenu

systemd : bases et systemctl

systemd est le système d’initialisation d’Ubuntu : il démarre la machine, lance et surveille les services, collecte les journaux et planifie des tâches. Cette rubrique présente son usage en ligne de commande. Les exemples utilisent des noms génériques (monapp).

Ubuntu systemd
24.04 255
26.04 259

Tout ce que gère systemd est une unité, décrite par un fichier texte :

Type Suffixe Rôle
Service .service Un programme à lancer et surveiller
Minuteur .timer Déclenche une unité à une heure ou à intervalle (voir Timers)
Socket .socket Écoute un port ou un fichier et lance un service à la demande (voir Dépendances, cibles et sockets)
Cible .target Groupe d’unités représentant un état (multi-user.target)
Montage .mount, .automount Système de fichiers monté
Chemin .path Réagit à un changement de fichier
Tranche .slice Groupe de ressources (cgroup)
Emplacement Rôle
/usr/lib/systemd/system/ Unités fournies par les paquets : ne pas modifier
/etc/systemd/system/ Unités de l’administrateur : prioritaires
/etc/systemd/system/nom.service.d/*.conf Surcharges partielles (« drop-ins »)
/run/systemd/system/ Unités temporaires (perdues au redémarrage)
~/.config/systemd/user/ Unités d’un utilisateur (voir plus bas)
Commande Rôle
systemctl status nom État détaillé et dernières lignes de journal
sudo systemctl start nom Démarre
sudo systemctl stop nom Arrête
sudo systemctl restart nom Arrête puis redémarre
sudo systemctl reload nom Recharge la configuration sans arrêter (si le service le gère)
sudo systemctl enable nom Démarre automatiquement au boot
sudo systemctl enable --now nom Active au boot et démarre maintenant
sudo systemctl disable nom Retire du démarrage automatique
systemctl is-active nom active, inactive, failed…
systemctl is-enabled nom enabled, disabled, masked…
sudo systemctl mask nom Interdit tout démarrage (lien vers /dev/null)
sudo systemctl unmask nom Annule mask
sudo systemctl daemon-reload Relit les fichiers d’unité après modification

start et enable sont indépendants : enable agit au prochain démarrage, start tout de suite.

Fenêtre de terminal
systemctl list-units --type=service # services chargés
systemctl list-units --type=service --state=running # services en cours d'exécution
systemctl list-unit-files --type=service # tous les services et leur état d'activation
systemctl --failed # unités en échec
systemctl cat nom # fichier d'unité et surcharges
systemctl show nom -p MainPID,Restart,User # propriétés précises
systemctl list-dependencies nom # dépendances
systemctl list-timers # minuteurs actifs
systemctl list-sockets # sockets en écoute

Lire l’état d’un service :

● monapp.service - Application monapp
Loaded: loaded (/etc/systemd/system/monapp.service; enabled; preset: enabled)
Active: active (running) since Mon 2026-10-05 16:00:00 UTC; 5min ago
Main PID: 1234 (python3)
CGroup: /system.slice/monapp.service
└─1234 /usr/bin/python3 /srv/monapp/app/serveur.py
Champ Signification
Loaded: … enabled Fichier trouvé ; démarrage automatique actif
Active: active (running) En fonctionnement
Active: failed A échoué (voir le journal)
Main PID Processus principal

Modifier une unité sans toucher au fichier d’origine

Section intitulée « Modifier une unité sans toucher au fichier d’origine »
Fenêtre de terminal
sudo systemctl edit nom # ouvre un fichier de surcharge (drop-in) dans l'éditeur
sudo systemctl edit --full nom # copie l'unité entière dans /etc pour la modifier
sudo systemctl revert nom # supprime les surcharges et revient à l'unité d'origine

systemctl edit crée /etc/systemd/system/nom.service.d/override.conf et recharge systemd à l’enregistrement.

Chaque utilisateur peut avoir ses propres services, sans sudo, dans ~/.config/systemd/user/ :

Fenêtre de terminal
systemctl --user status
systemctl --user enable --now monservice.service
systemctl --user daemon-reload
journalctl --user -u monservice
loginctl enable-linger $USER # les services de l'utilisateur démarrent au boot, sans session ouverte

Sans enable-linger, les services utilisateur s’arrêtent à la fermeture de la dernière session.

Fenêtre de terminal
sudo systemctl reboot # redémarre
sudo systemctl poweroff # éteint
sudo shutdown -r +10 "Maintenance" # redémarre dans 10 minutes
sudo shutdown -c # annule
systemctl is-system-running # running, degraded (au moins une unité en échec)…
Fenêtre de terminal
systemctl get-default # cible par défaut (multi-user.target pour un serveur)
sudo systemctl set-default multi-user.target
sudo systemctl isolate rescue.target # bascule vers le mode de secours (coupe les services)

Voir Dépendances, cibles et sockets.

  • Modifier avec systemctl edit plutôt que dans /usr/lib.
  • Toujours daemon-reload après avoir modifié un fichier d’unité.
  • Vérifier avec systemctl status puis journalctl -u nom (voir Journal).
  • Un service critique : Restart=on-failure (voir Écrire un service).
Symptôme Piste
Unit nom.service could not be found Mauvais nom ; systemctl list-unit-files | grep nom
Warning: The unit file … changed on disk sudo systemctl daemon-reload
Failed to enable unit: Unit file … is masked sudo systemctl unmask nom
Le service est failed systemctl status nom puis journalctl -u nom -e (voir Dépannage)
Commandes sans effet après modification Oubli de daemon-reload ou de restart

Ubuntu 24.04 et 26.04 : différences à connaître

Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »

Les commandes de ce guide sont identiques sur systemd 255 et 259.