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 unstopsuivi d’unstart. -
sudo systemctl reload <nom_du_service>Demande au service de recharger sa configuration sans s’interrompre. C’est beaucoup plus propre et rapide qu’unrestartsi 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> -fSuit les logs en temps réel (équivalent detail -f).journalctl -n 50 -u <nom_du_service>Affiche les 50 dernières lignes de log pour le service.
Bonnes pratiques
- Toujours utiliser
statuspour 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àrestartlorsque vous changez une configuration, pour éviter une micro-coupure de service. - Utilisez
journalctlcomme 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.
-
Inspecter un service :
- Vérifiez l’état complet du service
ssh(ousshd) avecsystemctl status ssh. Est-il actif ? Depuis quand ? - Vérifiez si ce service est activé au démarrage avec
systemctl is-enabled ssh.
- Vérifiez l’état complet du service
-
Lire les logs :
- Affichez les 100 dernières lignes de log du service que vous avez choisi.
journalctl -n 100 -u ssh
- Affichez les 100 dernières lignes de log du service que vous avez choisi.
-
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 sshpour voir le changement (la ligne “Active: active (running) since…”) etjournalctl -u sshpour 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 !