Sommaire
Gérer les services avec systemctl, consulter et filtrer les journaux système avec journalctl sous Debian 13.
🎯 Objectifs de la fiche
- Comprendre systemd — Rôle du PID 1, units, targets
- Gérer les services avec systemctl — start, stop, restart, enable, disable, status
- Consulter les logs avec journalctl — Filtrer par service, date, niveau
- Créer un service systemd personnalisé — Fichier .service, ExecStart, Restart
- Analyse de démarrage — systemd-analyze, blame
Prérequis
Debian 13 installé avec accès root ou sudo. Connaître les commandes de base Linux.
1. Comprendre systemd
systemd est le gestionnaire de système et de services de Debian (et la plupart des distributions modernes). Il est le premier processus lancé au démarrage (PID 1) et gère tous les services, montages, périphériques et cibles de démarrage.
| Concept | Explication | Exemple |
|---|---|---|
| Unit | Unité de configuration systemd | ssh.service, var-log.mount, network.target |
| Service | Type d'unit qui représente un service/démon | apache2.service, mysql.service |
| Target | Groupe d'units (remplace les runlevels) | multi-user.target (équiv. runlevel 3) |
| Socket | Unit d'activation par socket réseau | cups.socket |
| Timer | Planification (alternative à cron) | apt-daily.timer |
2. Gérer les services avec systemctl
| Commande | Action | Exemple |
|---|---|---|
| systemctl status | Affiche l'état d'un service | systemctl status ssh |
| systemctl start | Démarre un service | sudo systemctl start apache2 |
| systemctl stop | Arrête un service | sudo systemctl stop apache2 |
| systemctl restart | Redémarre un service (stop + start) | sudo systemctl restart apache2 |
| systemctl reload | Recharge la config sans interruption | sudo systemctl reload apache2 |
| systemctl enable | Active le démarrage automatique au boot | sudo systemctl enable ssh |
| systemctl disable | Désactive le démarrage automatique | sudo systemctl disable bluetooth |
| systemctl is-active | Vérifie si un service est actif | systemctl is-active ssh |
| systemctl is-enabled | Vérifie si un service démarre au boot | systemctl is-enabled ssh |
| systemctl list-units | Liste toutes les units actives | systemctl list-units --type=service |
| systemctl daemon-reload | Recharge la config systemd (après modif .service) | sudo systemctl daemon-reload |
# Exemple complet : installer, activer et vérifier nginx
sudo apt install nginx -y
sudo systemctl enable --now nginx # active ET démarre en une commande
systemctl status nginx # voir l'état détaillé
3. Consulter les logs avec journalctl
journalctl est l'outil de consultation du journal systemd (stocké en binaire dans /var/log/journal/).
| Commande | Utilité |
|---|---|
| journalctl | Affiche tout le journal (du plus ancien au plus récent) |
| journalctl -e | Affiche la fin du journal (dernières lignes) |
| journalctl -f | Suit le journal en temps réel (comme tail -f) |
| journalctl -u ssh | Logs d'un service spécifique |
| journalctl -u ssh -f | Logs en temps réel d'un service |
| journalctl --since '1 hour ago' | Logs de la dernière heure |
| journalctl --since '2026-06-01' | Logs depuis une date |
| journalctl -p err | Logs de niveau erreur uniquement |
| journalctl -p warning -u apache2 | Avertissements du service apache2 |
| journalctl -b | Logs du démarrage actuel uniquement |
| journalctl -b -1 | Logs du démarrage précédent |
| journalctl -n 50 | 50 dernières lignes |
| journalctl --disk-usage | Espace utilisé par le journal |
# Exemples pratiques de filtrage
sudo journalctl -u ssh --since "2026-06-01" --until "2026-06-10"
sudo journalctl -p err -b # erreurs du démarrage actuel
sudo journalctl -f -u apache2 # suivre les logs apache en temps réel
4. Niveaux de priorité des logs
| Niveau | Valeur | Signification |
|---|---|---|
| emerg | 0 | Système inutilisable |
| alert | 1 | Action immédiate requise |
| crit | 2 | Condition critique |
| err | 3 | Erreur |
| warning | 4 | Avertissement |
| notice | 5 | Condition normale mais significative |
| info | 6 | Message informatif |
| debug | 7 | Débogage |
5. Créer un service systemd personnalisé
Pour qu'un script ou une application démarre automatiquement avec le système, on crée un fichier .service :
sudo nano /etc/systemd/system/monapp.service
[Unit] Description=Mon application personnalisée After=network.target [Service] Type=simple User=www-data WorkingDirectory=/opt/monapp ExecStart=/usr/bin/python3 /opt/monapp/main.py Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
# Après création du fichier .service
sudo systemctl daemon-reload # recharger la config systemd
sudo systemctl enable --now monapp # activer et démarrer
systemctl status monapp # vérifier
| Directive | Section | Rôle |
|---|---|---|
| Description | [Unit] | Nom lisible du service |
| After | [Unit] | Démarrer après ces units (dépendances) |
| Type | [Service] | simple (processus direct), forking, oneshot |
| User | [Service] | Utilisateur sous lequel tourne le service |
| ExecStart | [Service] | Commande de démarrage |
| Restart | [Service] | Politique de redémarrage automatique |
| WantedBy | [Install] | Target à laquelle appartient le service |
6. Analyser le temps de démarrage
# Temps total de démarrage systemd-analyze # Détail par service (du plus lent au plus rapide) systemd-analyze blame # Graphique SVG du démarrage systemd-analyze plot > /tmp/boot.svg
- ☐ systemctl status fonctionne sur au moins 3 services
- ☐ Un service arrêté et redémarré avec systemctl
- ☐ journalctl -u ssh consulté avec succès
- ☐ Filtrage par date ou niveau de priorité testé
- ☐ Un fichier .service simple créé et testé
- ☐ systemd-analyze blame exécuté
Quelle commande active un service AU BOOT et le démarre immédiatement ?
✅ Réponse : systemctl enable --now
Quelle commande affiche les logs d'un service en temps réel ?
✅ Réponse : journalctl -f -u ssh
Après avoir créé un fichier .service, quelle commande faut-il exécuter ?
✅ Réponse : systemctl daemon-reload
Quel est le PID du processus systemd ?
✅ Réponse : 1
Quelle option journalctl filtre les logs par niveau d'erreur ?
✅ Réponse : journalctl -p err