Retour au cours

services et systemd : gérer les démons

Objectifs

  • Comprendre ce qu’est un service (ou “démon”) et son rôle.
  • Gérer le cycle de vie d’un service (démarrer, arrêter, redémarrer) avec systemctl.
  • Activer ou désactiver le lancement automatique d’un service au démarrage.
  • Inspecter l’état et les logs d’un service pour le diagnostic.

Qu’est-ce qu’un service ?

Un service, souvent appelé “démon” (daemon), est un programme qui s’exécute en arrière-plan, sans interface utilisateur directe. Son but est de fournir une fonctionnalité de fond au système ou au réseau. Exemples courants :

  • Un serveur web (nginx, apache2).
  • Une base de données (postgresql, mariadb).
  • Le service de connexion à distance (sshd).
  • Le service de gestion du réseau (NetworkManager).

systemd et systemctl : Le centre de contrôle

Sur la grande majorité des distributions Linux modernes, systemd est le gestionnaire de système et de services. C’est le tout premier processus lancé au démarrage (PID 1), et il est responsable de démarrer tout le reste.

L’outil en ligne de commande pour interagir avec systemd est systemctl. C’est votre télécommande universelle pour tous les services du système.

Gérer le cycle de vie d’un service

Les commandes suivantes permettent de contrôler un service en temps réel. Elles nécessitent généralement des privilèges d’administrateur (sudo).

  • systemctl status <nom_du_service> C’est la commande la plus utile. Elle affiche un état complet du service : est-il actif ? A-t-il échoué ? Depuis quand tourne-t-il ? Quelles sont ses dernières lignes de log ?

  • sudo systemctl start <nom_du_service> Démarre un service qui est arrêté.

  • sudo systemctl stop <nom_du_service> Arrête un service en cours d’exécution.

  • sudo systemctl restart <nom_du_service> Redémarre un service. C’est un raccourci pour un stop suivi d’un start.

  • sudo systemctl reload <nom_du_service> Demande au service de recharger sa configuration sans s’interrompre. C’est beaucoup plus propre et rapide qu’un restart si le service le supporte.

Gérer le démarrage automatique

Ces commandes déterminent si un service doit se lancer automatiquement au démarrage du système.

  • sudo systemctl enable <nom_du_service> Active le service au démarrage.

  • sudo systemctl disable <nom_du_service> Désactive le lancement automatique.

  • systemctl is-enabled <nom_du_service> Vérifie si un service est configuré pour démarrer automatiquement.

Lire les logs avec journalctl

systemd intègre son propre système de journalisation, le “Journal”. Il centralise les logs de tous les services qu’il gère. La commande pour lire ce journal est journalctl.

  • journalctl -u <nom_du_service> Affiche tous les messages de log pour une “unité” (-u) spécifique.
  • journalctl -u <nom_du_service> -f Suit les logs en temps réel (équivalent de tail -f).
  • journalctl -n 50 -u <nom_du_service> Affiche les 50 dernières lignes de log pour le service.

Bonnes pratiques

  • Toujours utiliser status pour vérifier l’état d’un service après une action (start, restart). Ne supposez pas que la commande a réussi.
  • Préférer reload à restart lorsque vous changez une configuration, pour éviter une micro-coupure de service.
  • Utilisez journalctl comme premier réflexe pour débugger un service qui ne démarre pas. Les messages d’erreur y sont souvent très explicites.

Exercices

Pour ces exercices, choisissez un service simple qui est probablement installé sur votre machine, comme sshd (le service SSH), cron ou NetworkManager.

  1. Inspecter un service :

    • Vérifiez l’état complet du service ssh (ou sshd) avec systemctl status ssh. Est-il actif ? Depuis quand ?
    • Vérifiez si ce service est activé au démarrage avec systemctl is-enabled ssh.
  2. Lire les logs :

    • Affichez les 100 dernières lignes de log du service que vous avez choisi. journalctl -n 100 -u ssh
  3. Redémarrer un service (avec prudence) :

    • Si vous êtes dans un environnement de test comme une machine virtuelle, vous pouvez redémarrer un service.
    • sudo systemctl restart ssh
    • Utilisez immédiatement systemctl status ssh pour voir le changement (la ligne “Active: active (running) since…”) et journalctl -u ssh pour voir les logs de redémarrage.
    • Attention : Ne faites pas cela sur un serveur de production auquel vous n’avez accès qu’en SSH, car une erreur lors du redémarrage pourrait couper votre propre accès !