Maîtriser systemctl pour gérer les services, créer des unités personnalisées, analyser les logs avec journalctl et planifier des tâches avec les timers.
systemd est le gestionnaire de système et de services utilisé par la plupart des distributions Linux modernes (Debian, Ubuntu, CentOS, Fedora…). Il gère le démarrage du système, les services (daemon), les logs et les tâches planifiées. La commande systemctl est votre interface principale pour interagir avec systemd.
# Démarre un service
sudo systemctl start nginx
# Arrête un service
sudo systemctl stop nginx
# Redémarre un service (arrêt + démarrage)
sudo systemctl restart nginx
# Recharge la configuration sans arrêter le service
sudo systemctl reload nginx
# Active le démarrage automatique au boot
sudo systemctl enable nginx
# Désactive le démarrage automatique
sudo systemctl disable nginx
# Active ET démarre en une seule commande
sudo systemctl enable --now nginx
# Vérifie l'état d'un service (très utile pour le debug)
sudo systemctl status nginx
# ● nginx.service - A high performance web server
# Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
# Active: active (running) since Sun 2026-01-01 10:00:00 UTC
# Liste tous les services actifs
systemctl list-units --type=service --state=running
# Liste les services en échec
systemctl --failed
# Crée un fichier .service pour votre application
sudo nano /etc/systemd/system/mon-app.service
Contenu du fichier :
[Unit]
Description=Mon Application Web
Documentation=https://example.com/docs
After=network.target # Démarre après que le réseau soit prêt
Wants=network-online.target # Préfère avoir une connexion réseau
[Service]
Type=simple # Le processus principal reste au premier plan
User=www-data # Exécute sous cet utilisateur (pas root !)
Group=www-data
WorkingDirectory=/opt/mon-app # Dossier de travail
ExecStart=/opt/mon-app/start.sh # Commande de démarrage
ExecReload=/bin/kill -HUP $MAINPID # Commande de reload
Restart=on-failure # Redémarre automatiquement en cas de crash
RestartSec=5 # Attend 5 secondes avant de redémarrer
StandardOutput=journal # Envoie stdout vers journalctl
StandardError=journal # Envoie stderr vers journalctl
[Install]
WantedBy=multi-user.target # Démarre en mode multi-utilisateur (boot normal)
# Recharge la configuration systemd (après création/modification d'un .service)
sudo systemctl daemon-reload
# Active et démarre le nouveau service
sudo systemctl enable --now mon-app
# Vérifie que ça fonctionne
sudo systemctl status mon-app
.service, vous devez exécuter systemctl daemon-reload pour que systemd prenne en compte les changements.
# Logs d'un service spécifique
sudo journalctl -u nginx
# Logs en temps réel (comme tail -f)
sudo journalctl -u nginx -f
# Logs depuis le dernier boot
sudo journalctl -u nginx -b
# Logs des 30 dernières minutes
sudo journalctl -u nginx --since "30 min ago"
# Logs entre deux dates
sudo journalctl -u nginx --since "2026-01-01 08:00" --until "2026-01-01 12:00"
# Uniquement les erreurs
sudo journalctl -u nginx -p err
# Logs du kernel (équivalent de dmesg)
sudo journalctl -k
# Espace disque utilisé par les logs
sudo journalctl --disk-usage
# Nettoie les logs de plus de 7 jours
sudo journalctl --vacuum-time=7d
# Nettoie pour ne garder que 500 Mo de logs
sudo journalctl --vacuum-size=500M
emerg → alert → crit → err → warning → notice → info → debug. Utilisez -p err pour ne voir que les erreurs et au-dessus.
# Les timers systemd remplacent cron avec plus de contrôle
# Il faut 2 fichiers : un .service (la tâche) et un .timer (la planification)
# 1. Crée le service de backup
sudo nano /etc/systemd/system/backup.service
[Unit]
Description=Backup quotidien
[Service]
Type=oneshot # S'exécute une fois puis s'arrête
ExecStart=/usr/local/bin/backup.sh
# 2. Crée le timer associé
sudo nano /etc/systemd/system/backup.timer
[Unit]
Description=Lance le backup tous les jours à 3h
[Timer]
OnCalendar=*-*-* 03:00:00 # Tous les jours à 3h du matin
Persistent=true # Rattrape les exécutions manquées (si le serveur était éteint)
RandomizedDelaySec=300 # Ajoute un délai aléatoire de 0-5 min (évite les pics)
[Install]
WantedBy=timers.target
# Active le timer
sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
# Liste tous les timers actifs
systemctl list-timers --all
# Vérifie quand le prochain déclenchement aura lieu
systemctl status backup.timer
# Analyse le temps de boot (quels services ralentissent le démarrage)
systemd-analyze
# Startup finished in 3.5s (kernel) + 12.8s (userspace) = 16.3s
# Détail par service (du plus lent au plus rapide)
systemd-analyze blame | head -20
# Arbre des dépendances d'un service
systemctl list-dependencies nginx
# Vérifie la syntaxe d'un fichier .service
systemd-analyze verify /etc/systemd/system/mon-app.service
# Affiche les propriétés d'un service
systemctl show nginx --property=MainPID,ActiveState,SubState
# Masque un service (empêche tout démarrage, même manuel)
sudo systemctl mask service-dangereux
# Démasque
sudo systemctl unmask service-dangereux
/etc/systemd/system/ — vos services personnalisés (prioritaire)./lib/systemd/system/ — services installés par les paquets (ne pas modifier directement).