Systemd

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Système d'init (PID 1)
Commande de gestion Systemctl
Types d'unités service · socket · target · timer · mount · device · path · slice · scope
Emplacements des units /usr/lib/systemd/system/ (paquets) · /etc/systemd/system/ (admin)
Voir aussi Systemctl · Cgroups · Timedatectl · Cron

systemd est le système d'init de la plupart des distributions Linux récentes (RHEL7+, Debian 8+, Ubuntu 15.04+...) : le premier processus lancé par le noyau (PID 1), responsable de démarrer, arrêter et superviser tout le reste du système. Il remplace SysV init et son modèle de scripts séquentiels par un modèle déclaratif basé sur des unités et leurs dépendances, permettant la parallélisation du boot et l'activation à la demande. Cette page décrit l'architecture ; pour la commande de pilotage au quotidien, voir Systemctl.

Unités

systemd organise tout ce qu'il gère en unités (units), chacune décrite par un fichier texte et typée par son extension :

  • service — un processus démon (le type le plus courant, équivalent des anciens scripts /etc/init.d/).
  • socket — un socket réseau ou IPC ; permet l'activation à la demande, le service associé n'est démarré qu'à la première connexion entrante.
  • target — un point de synchronisation qui regroupe d'autres unités, sans action propre ; remplace les runlevels SysV (multi-user.target, graphical.target...).
  • timer — déclenche une unité service à intervalle ou à date donnée ; alternative native à Cron pour les tâches liées à un service systemd, avec OnCalendar= (planification absolue) ou OnBootSec=/OnUnitActiveSec= (planification relative).
  • mount / automount — un point de montage, généré automatiquement à partir de /etc/fstab ou déclaré manuellement.
  • device — un périphérique exposé par udev, utilisable comme dépendance (attendre qu'un disque soit prêt avant de le monter).
  • path — surveille un chemin du système de fichiers et déclenche une autre unité en cas de changement.
  • slice — un nœud de la hiérarchie de cgroups servant à regrouper et limiter les ressources d'un ensemble d'unités.
  • scope — un cgroup transitoire pour des processus démarrés en dehors de systemd (ex. une session utilisateur ouverte via SSH).

Référence complète du format unit : https://www.freedesktop.org/software/systemd/man/systemd.unit.html

Arbre de dépendances

Chaque unité déclare ses relations avec les autres via des directives dans sa section [Unit] :

  • Wants= — dépendance faible (l'unité cible démarre si possible, sans bloquer en cas d'échec).
  • Requires= — dépendance forte (l'échec de l'unité cible fait échouer l'unité courante).
  • After= / Before= — ordre de démarrage, indépendant du type de dépendance ci-dessus (Wants= seul ne garantit aucun ordre).
  • Conflicts= — exclusion mutuelle (démarrer l'une arrête l'autre).

Au boot, systemd part d'une target par défaut (systemctl get-default, généralement multi-user.target ou graphical.target) et résout récursivement l'arbre de tout ce qu'elle requiert et souhaite, en respectant les contraintes d'ordre, pour construire un plan de démarrage aussi parallèle que possible.

journald

systemd embarque son propre collecteur de journaux, systemd-journald, qui remplace ou complète syslog. Il centralise les sorties stdout/stderr de toutes les unités ainsi que les messages du noyau, dans un format binaire structuré et indexé (interrogeable par métadonnées : unité, PID, priorité, période...) plutôt qu'en texte brut. Par défaut le journal est volatile (perdu au reboot) sauf configuration explicite pour le rendre persistant. La commande d'interrogation (journalctl) et sa configuration sont détaillées sur Systemctl.

Cgroups : la fondation

Chaque unité démarrée par systemd est automatiquement placée dans son propre groupe de contrôle (cgroup), organisé en une hiérarchie de slices (system.slice, user.slice...). C'est ce qui permet à systemd de mesurer et limiter précisément la consommation CPU/mémoire/IO de chaque service, et de tuer proprement tous les processus d'une unité (y compris ceux qu'elle aurait forkés) en une seule commande. Détails du mécanisme : Cgroups.

Autres composants de la suite systemd

Au-delà de l'init proprement dit, le projet systemd fournit plusieurs démons et commandes complémentaires : logind (gestion des sessions utilisateur, loginctl), resolved (résolution DNS), timesyncd (client NTP minimal, voir Timedatectl), networkd (configuration réseau), udevd (gestion des périphériques) et tmpfiles (purge périodique de fichiers temporaires).

Voir aussi

  • Systemctl — commande de pilotage des services et unités au quotidien
  • Cgroups — mécanisme noyau de limitation de ressources utilisé par les slices/scopes
  • Timedatectl — gestion de la date/heure, intégrée à systemd
  • Cron — ordonnanceur historique, comparable aux timer units pour la planification périodique