← Retour au portail

Fiche 12 - systemd & journalctl — Gestion des services et des logs

Gérer les services avec systemctl, consulter et filtrer les journaux système avec journalctl sous Debian 13.

Intermédiaire — SISR 1ère année ⏱️ 20 min 📁 Administration système

🎯 Objectifs de la fiche

  1. Comprendre systemd — Rôle du PID 1, units, targets
  2. Gérer les services avec systemctl — start, stop, restart, enable, disable, status
  3. Consulter les logs avec journalctl — Filtrer par service, date, niveau
  4. Créer un service systemd personnalisé — Fichier .service, ExecStart, Restart
  5. 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.

ConceptExplicationExemple
UnitUnité de configuration systemdssh.service, var-log.mount, network.target
ServiceType d'unit qui représente un service/démonapache2.service, mysql.service
TargetGroupe d'units (remplace les runlevels)multi-user.target (équiv. runlevel 3)
SocketUnit d'activation par socket réseaucups.socket
TimerPlanification (alternative à cron)apt-daily.timer

2. Gérer les services avec systemctl

CommandeActionExemple
systemctl statusAffiche l'état d'un servicesystemctl status ssh
systemctl startDémarre un servicesudo systemctl start apache2
systemctl stopArrête un servicesudo systemctl stop apache2
systemctl restartRedémarre un service (stop + start)sudo systemctl restart apache2
systemctl reloadRecharge la config sans interruptionsudo systemctl reload apache2
systemctl enableActive le démarrage automatique au bootsudo systemctl enable ssh
systemctl disableDésactive le démarrage automatiquesudo systemctl disable bluetooth
systemctl is-activeVérifie si un service est actifsystemctl is-active ssh
systemctl is-enabledVérifie si un service démarre au bootsystemctl is-enabled ssh
systemctl list-unitsListe toutes les units activessystemctl list-units --type=service
systemctl daemon-reloadRecharge 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é
💡 La combinaison enable --now est très pratique : elle active le service au boot ET le démarre immédiatement, en une seule commande.

3. Consulter les logs avec journalctl

journalctl est l'outil de consultation du journal systemd (stocké en binaire dans /var/log/journal/).

CommandeUtilité
journalctlAffiche tout le journal (du plus ancien au plus récent)
journalctl -eAffiche la fin du journal (dernières lignes)
journalctl -fSuit le journal en temps réel (comme tail -f)
journalctl -u sshLogs d'un service spécifique
journalctl -u ssh -fLogs 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 errLogs de niveau erreur uniquement
journalctl -p warning -u apache2Avertissements du service apache2
journalctl -bLogs du démarrage actuel uniquement
journalctl -b -1Logs du démarrage précédent
journalctl -n 5050 dernières lignes
journalctl --disk-usageEspace 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

NiveauValeurSignification
emerg0Système inutilisable
alert1Action immédiate requise
crit2Condition critique
err3Erreur
warning4Avertissement
notice5Condition normale mais significative
info6Message informatif
debug7Dé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
DirectiveSectionRô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
Quelle commande active un service AU BOOT et le démarre immédiatement ?
  • systemctl start && systemctl enable
  • systemctl enable --now
  • systemctl activate
  • systemctl boot-enable

✅ Réponse : systemctl enable --now

Quelle commande affiche les logs d'un service en temps réel ?
  • journalctl -u ssh
  • journalctl -f -u ssh
  • tail /var/log/ssh.log
  • systemctl logs ssh

✅ Réponse : journalctl -f -u ssh

Après avoir créé un fichier .service, quelle commande faut-il exécuter ?
  • systemctl restart
  • systemctl reload
  • systemctl daemon-reload
  • systemctl refresh

✅ Réponse : systemctl daemon-reload

Quel est le PID du processus systemd ?
  • 0
  • 1
  • 100
  • Variable

✅ Réponse : 1

Quelle option journalctl filtre les logs par niveau d'erreur ?
  • journalctl --level err
  • journalctl -p err
  • journalctl --filter error
  • journalctl -e

✅ Réponse : journalctl -p err