Comprendre et gérer systemd sous Linux

  1. Fonctionnalités principales

systemd assure le démarrage parallèle des services au boot, active les démons à la demande, gère automatiquement les dépendances entre services, utilise les sockets et D-Bus pour l'activation, sépare les sockets des programmes de service, reste compatible avec les scripts sysv init, repose sur la commande systemctl (non extensible, ne communique pas avec les services non systemd), et permet de prendre des instantanés de l'état système.

  1. Concepts fondamentaux

2.1 Les unités

2.1.1 Catégories d'unités

  • Service unit (.service) : définit un service système.
  • Socket unit (.socket) : fichier de socket IPC, permet un démarrage à la demande.
  • Target unit (.target) : simule les niveaux d'exécution.
  • Device unit (.device) : périphérique reconnu par le noyau.
  • Mount unit (.mount) : point de montage d'un système de fichiers.
  • Snapshot unit (.snapshot) : gestion d'instantanés.
  • Swap unit (.swap) : identifie un périphérique swap.
  • Automount unit (.automount) : point de montage automatique.
  • Path unit (.path) : fichier ou répertoire déclenchant une activation différée (ex: spool).

2.1.1.1 Exemple de Service Unit (conteneur)

# mycontainer.service
[Unit]
Description=Service pour conteneur applicatif
Documentation=https://example.com/container-guide

[Service]
Environment="PATH=/opt/myapp/bin:/bin:/sbin:/usr/bin:/usr/sbin"
ExecStart=/opt/myapp/bin/container-daemon
ExecStartPost=/sbin/iptables -I INPUT -s 0.0.0.0/0 -j ACCEPT
ExecReload=/bin/kill -s HUP $MAINPID
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
LimitNPROC=4096
LimitCORE=0
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target

Détails des sections

[Unit] : options générales indépendantes du type.

  • Description : information d'identification.
  • After : ordre de démarrage, cette unité démarre après celles listées.
  • Requires : dépendence forte, si les unités requises échouent, l'unité échoue.
  • Wants : dépendance faible, l'unité démarre même si les dépendances échouent.
  • Conflicts : relations d'exclusion.

[Service] : options spécifiques aux services.

  • Type : mode de démarrage : simple (défaut), forking (processus parent se termine après avoir forké), oneshot, dbus, notify, idle.
  • EnvironmentFile : fichier de variablse d'environnement.
  • ExecStart : commande ou script absolu pour démarrer.
  • ExecStartPre / ExecStartPost : actions avant/après le démarrage.
  • ExecStop : commande d'arrêt.
  • Restart : redémarrage automatique (ex : on-failure, always).
  • RestartSec : pause avant redémarrage (défaut 100 ms, unité par défaut secondes).
  • PrivateTmp : si yes, crée un répertoire temporaire privé sous /tmp/systemd-private-....

[Install] : options pour enable/disable.

  • Alias : alias pour systemctl.
  • RequiredBy : listes des unités qui dépendent fortement de celle-ci.
  • WantedBy : dépendance faible réciproque.
  • Also : autres unités à installer en même temps.

2.2 Emplacements de configuration

  • /usr/lib/systemd/system – scripts fournis par le packager (équivalent à /etc/init.d/).
  • /lib/systemd/system – équivalent sur Ubuntu.
  • /run/systemd/system – scripts générés dynamiquement, priorité plus élevée.
  • /etc/systemd/system – scripts administrateur, priorité maximale (ressemble à /etc/rcN.d/Sxx).
  1. Commande systemctl

# Syntaxe générale
systemctl COMMAND nom[.service]

# Commandes usuelles
systemctl start       # Démarrer
systemctl stop        # Arrêter
systemctl restart     # Redémarrer
systemctl status      # État détaillé
systemctl mask        # Interdire tout démarrage (manuel/auto)
systemctl unmask      # Annuler le masquage
systemctl is-active   # Vérifier si en cours d'exécution
systemctl list-units --type service         # Services actifs
systemctl list-units --type service --all   # Tous les services
systemctl enable      # Activer au démarrage
systemctl disable     # Désactiver au démarrage
systemctl list-unit-files --type service    # État d'activation
systemctl --failed --type=service           # Services en échec
systemctl list-dependencies nom.service     # Dépendances
systemctl kill nom.service                 # Tuer le processus

3.1 États d'un service

  • loaded – l'unité a été chargée.
  • active (running) – exécution continue.
  • active (exited) – tâche unique terminée avec succès.
  • active (waiting) – en attente d'un événement.
  • inactive – non exécuté.
  • enabled – démarrage automatique au boot.
  • disabled – pas de démarrage automatique.
  • static – pas d'activation directe, mais peut être activé par un autre service.
  • indirect – redirigé vers une autre unité.

Étiquettes: systemd systemctl unit service Linux

Publié le 14 juillet à 02h31