systemd est le système d’init de presque toutes les distributions Linux courantes. C’est le premier processus lancé par le noyau (PID 1) et il gère le cycle de vie de chaque service de la machine.
Les unités
systemd représente tout ce qu’il gère sous forme d’unités. Une unité est décrite par un fichier texte, et son suffixe indique à systemd de quoi il s’agit.
.service - un démon ou une commande exécutée une seule fois
.socket - une socket en écoute, capable de démarrer son service à la demande
.timer - un déclencheur planifié, le remplaçant moderne de cron
.mount / .automount - un point de montage
.target - un regroupement d’unités, l’équivalent des anciens niveaux d’exécution
Où vivent les fichiers d’unité
Trois répertoires contiennent les fichiers d’unité, par priorité croissante. Un fichier situé dans un répertoire plus prioritaire remplace intégralement celui du même nom en dessous.
/usr/lib/systemd/system/ # fourni par les paquets - ne pas modifier
/run/systemd/system/ # runtime, volatile
/etc/systemd/system/ # surcharges locales - c’est ici qu’on écritNe modifiez jamais directement un fichier sous /usr/lib/systemd/system : la prochaine mise à jour du paquet l’écrasera. Utilisez `systemctl edit` pour créer une surcharge.
Un service minimal
[Unit]
Description=Serveur API d’exemple
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/example-api --port 8080
Restart=on-failure
RestartSec=5s
User=example
[Install]
WantedBy=multi-user.targetLes trois sections répondent à trois questions : quand cette unité doit-elle démarrer par rapport aux autres, comment le processus est-il lancé, et qu’est-ce qui doit l’activer au démarrage.
systemd est le PID 1 et gère chaque service comme une unité.
Le type d’unité vient du suffixe du fichier : .service, .socket, .timer, .target.
Les surcharges locales vont dans /etc/systemd/system, jamais dans /usr/lib.
[Unit] définit l’ordre, [Service] la façon de lancer, [Install] ce qui l’active.