Gérer les services Linux avec systemd : systemctl, journalctl, units et timers, avec les écarts entre Debian, Ubuntu et RHEL !
Linux
Publié le
Karl Certa Admin systèmes & réseaux5 ans dans l'IT, passé par le support puis l'admin sys, aujourd'hui Ops. J'apprends le cloud et je pose tout au propre ici. Focus sur l'IaC & le cloud AWS SAA, prochaine étape Kubernetes LinkedIn karlcerta.fr GitHub Karl Certa
Systemd est le gestionnaire de services et le PID 1 de la quasi-totalité des distributions Linux. Il démarre les services, gère leurs dépendances, collecte leurs logs dans le journal et planifie des tâches via ses timers.
🐧 Ce qui change selon la distribution
Les commandes systemctl sont identiques partout. Ce qui varie, c’est la version de systemd livrée, donc les options disponibles, et les choix propres à chaque distribution. Pour connaître la vôtre : systemctl --version.
📌 Distribution
📦 Version de systemd
⚠️ Particularité de la distribution
🌀 Debian 12 bookworm
252
rsyslog n’est plus installé par défaut, /var/log/syslog absent
🌀 Debian 13 trixie
257
Config par défaut sous /usr/lib/systemd/
🟠 Ubuntu 22.04 LTS
249
SSH en activation par socket depuis la 22.10
🟠 Ubuntu 24.04 LTS
255
ssh.socket écoute à la place de ssh.service
🟠 Ubuntu 26.04 LTS
259
Support des anciens cgroup v1 définitivement supprimé
🔴 RHEL / Rocky / Alma 9
252
Les scripts SysV sont encore pris en charge
🔴 RHEL / Rocky / Alma 10
257
Scripts SysV dépréciés, à convertir en units
Alpine et Devuan font exception : elles tournent sous OpenRC ou sysvinit, aucune commande de cette fiche n’y fonctionne.
⚙️ Gestion des services
📌 Action
🧠 Commande
▶️ Démarrer
sudo systemctl start <unit>
⏹️ Arrêter
sudo systemctl stop <unit>
🔁 Redémarrer
sudo systemctl restart <unit>
🔄 Recharger la config
sudo systemctl reload <unit>
🚀 Activer au démarrage
sudo systemctl enable <unit>
⚡ Activer et démarrer
sudo systemctl enable --now <unit>
🚫 Désactiver au démarrage
sudo systemctl disable --now <unit>
🔒 Interdire tout démarrage
sudo systemctl mask <unit>
🔓 Lever l’interdiction
sudo systemctl unmask <unit>
♻️ Prendre en compte un unit modifié
sudo systemctl daemon-reload
🏷️ Noms de services selon la distribution
C’est là que les copier-coller entre distributions échouent.
📌 Service
🌀 Debian / Ubuntu
🔴 RHEL / Rocky / Alma / Fedora
🟢 openSUSE
🔐 SSH
ssh (+ ssh.socket sur Ubuntu)
sshd
sshd
⏰ Cron
cron
crond
cron
🌐 Apache
apache2
httpd
apache2
🛡️ Pare-feu
ufw ou nftables
firewalld
firewalld
🕐 Horloge
systemd-timesyncd
chronyd
chronyd
🔍 État et inventaire
📌 Action
🧠 Commande
📊 Statut détaillé
systemctl status <unit>
✅ Le service tourne ?
systemctl is-active <unit>
🚀 Activé au boot ?
systemctl is-enabled <unit>
📋 Services chargés
systemctl list-units --type=service
🗂️ Tous les services installés
systemctl list-unit-files --type=service
❌ Services en échec
systemctl --failed
📄 Contenu réel de l’unit
systemctl cat <unit>
📜 Lire le journal d’un service
journalctl fait partie de systemd. Le démon systemd-journald capte la sortie de chaque service et l’indexe par unit, ce qui permet de filtrer avec -u. C’est le prolongement de systemctl status, qui n’affiche que les dix dernières lignes.
📌 Action
🧠 Commande
📖 Logs d’un service
journalctl -u nginx
🔟 Les 50 dernières lignes
journalctl -u nginx -n 50 --no-pager
👀 Suivre en direct
journalctl -u nginx -f
🔀 Suivre plusieurs services
journalctl -f -u nginx -u php8.2-fpm
🕐 Depuis un moment
journalctl -u nginx --since "2 hours ago"
🔴 Erreurs uniquement
journalctl -u nginx -p err
🥾 Boot courant / précédent
journalctl -b / journalctl -b -1
🆘 Dernières erreurs commentées
journalctl -xe
Pour la place occupée par le journal et sa purge, voir la fiche Espace disque.
📄 Anatomie d’un unit
[Unit]Description=Sauvegarde applicativeAfter=network-online.target # Attend le réseau réellement joignableWants=network-online.target # Dépendance souple, pas bloquante[Service]Type=simple # simple : le process reste au premier plan # oneshot : s'exécute puis se termineUser=backup # Ne jamais laisser root sans raisonExecStart=/opt/scripts/backup.shRestart=on-failure # no, on-failure, alwaysRestartSec=30 # Attente avant relance[Install]WantedBy=multi-user.target # Cible qui déclenche le service au boot
📌 Action
🧠 Commande
➕ Ajouter une surcharge
sudo systemctl edit <unit>
📝 Copier l’unit complet
sudo systemctl edit --full <unit>
🔙 Revenir à l’original
sudo systemctl revert <unit>
📂 Emplacements et priorité
📌 Chemin
🧠 Rôle
📊 Priorité
/etc/systemd/system/
Vos units et surcharges
La plus forte
/usr/lib/systemd/system/
Units fournis par les paquets
La plus faible
~/.config/systemd/user/
Units utilisateur (--user)
Session
Sur Debian et Ubuntu, /lib/systemd/system/ reste visible : depuis la fusion de /usr, ce n’est qu’un lien symbolique vers /usr/lib/systemd/system/.
⏱️ Timers, l’alternative à cron
📌 Action
🧠 Commande
📋 Lister les timers actifs
systemctl list-timers
▶️ Activer un timer
sudo systemctl enable --now backup.timer
🧪 Déclencher à la main
sudo systemctl start backup.service
📅 Tester une expression
systemd-analyze calendar "Mon *-*-* 02:30:00"
# /etc/systemd/system/backup.timer[Unit]Description=Sauvegarde quotidienne[Timer]OnCalendar=*-*-* 02:30:00Persistent=true # Rattrape l'exécution manquée si la machine était éteinte[Install]WantedBy=timers.target