📄 contenu.md 🔒 87d5a2a9…4fd655be Se connecter pour télécharger ← Retour
# 2. systemd et la gestion de services

systemd est le système d'init de la quasi-totalité des distributions Linux
majeures depuis le milieu des années 2010 (PID 1, premier processus lancé
par le noyau). Cette section couvre les unités, l'ordonnancement des
dépendances au démarrage, la journalisation, et les nouveautés récentes
(version 261, juin 2026).

## Les unités — bien plus que des services

Une **unité** systemd est un fichier déclaratif décrivant une ressource
gérée. Les types les plus courants :

- **`.service`** : un processus à démarrer/arrêter/superviser.
- **`.socket`** : un socket réseau ou Unix — permet le *socket activation*,
  démarrer le service correspondant seulement à la première connexion reçue.
- **`.timer`** : un déclencheur temporel, alternative moderne à cron
  (détaillée en section 12).
- **`.mount`** / **`.automount`** : un point de montage géré déclarativement,
  avec montage à la demande pour `.automount`.
- **`.target`** : un point de synchronisation regroupant d'autres unités
  (ex. `multi-user.target`), sans processus propre — l'équivalent moderne
  des anciens *runlevels*.
- **`.slice`** : un nœud de la hiérarchie cgroup (voir section 1), pour
  regrouper et limiter collectivement plusieurs unités.

## Dépendances déclaratives, pas un ordre figé

Contrairement à un script d'init séquentiel, systemd résout un **graphe de
dépendances** et démarre en parallèle tout ce qui peut l'être. Directives
clés d'une section `[Unit]` :

- `Requires=` : dépendance forte — l'échec de la cible entraîne l'arrêt de
  l'unité dépendante.
- `Wants=` : dépendance faible — un échec de la cible n'empêche pas le
  démarrage.
- `After=` / `Before=` : ordre relatif pur, **sans** impliquer de dépendance
  de démarrage (`After=` seul ne garantit pas que l'unité cible soit lancée,
  seulement que si les deux démarrent, l'ordre est respecté) — piège
  fréquent chez les débutants : `Requires=`/`Wants=` et `After=`/`Before=`
  sont deux axes indépendants, presque toujours combinés ensemble.

## Cycle de vie et supervision

Chaque service peut déclarer un `Type=` (`simple`, `forking`, `oneshot`,
`notify`, `dbus`) qui indique à systemd **comment savoir** que le service a
fini de démarrer. `Restart=on-failure` (avec `RestartSec=`) fournit une
supervision automatique — le patron classique de haute disponibilité au
niveau d'un seul service. `systemd-cgls`/`systemd-cgtop` affichent
respectivement la hiérarchie et la consommation en temps réel par cgroup.

## journald — la journalisation structurée

journald collecte stdout/stderr de chaque unité (plus les messages du
noyau et les appels `syslog()` classiques) dans un format **binaire indexé**
(pas du texte brut) rotatif, interrogeable avec `journalctl` :

- `journalctl -u nom.service` : uniquement cette unité.
- `journalctl -b` : depuis le dernier démarrage.
- `journalctl -f` : suivi en continu (équivalent `tail -f`).
- `journalctl -p err` : filtrage par niveau de sévérité syslog.

Chaque entrée porte des métadonnées structurées (PID, UID, cgroup
d'origine, horodatage monotone ET horloge murale) — un simple grep sur un
fichier texte ne peut pas reconstituer ces champs après coup.

## Nouveautés récentes (259 à 261, 2026)

- **systemd 259** a retiré le support historique des scripts SysV
  (`/etc/init.d/`) — toute unité doit désormais être une unité native.
- **systemd 260** a ajouté des garde-fous explicites contre les agents
  automatisés qui tenteraient de modifier la configuration système sans
  supervision humaine — reflet direct des nouveaux usages d'assistants IA
  dans l'administration système.
- **systemd 261** (juin 2026) introduit un service de **TPM logiciel**
  (`systemd-tpm2`, utile en environnement virtualisé sans TPM matériel — lié
  au chiffrement de disque, voir section 6), un sous-système de métadonnées
  cloud (`systemd-imdsd`), et **`systemd-sysinstall`**, un nouvel installeur
  textuel piloté par une configuration déclarative plutôt qu'un script
  shell ad hoc.

*(Schéma disponible : `schema.svg`, dans ce dossier.)*
4.0 Ko BLAKE3 : 87d5a2a9…4fd655be