Gestion des services dans systemd¶
Dans cet article
systemd est le système d'initialisation (init) et le gestionnaire de services standard dans la plupart des distributions Linux modernes :
- Ubuntu 16.04+ (Ubuntu 20.04/22.04/24.04 fortement recommandés)
- Debian 8+ (Debian 11/12 – versions LTS actuelles)
- RHEL/CentOS 7+ (RHEL 9 / AlmaLinux/Rocky Linux 9 – alternatives modernes à CentOS)
- Fedora, openSUSE, Arch, et autres
Après le démarrage du noyau, celui-ci transfère le contrôle à systemd (PID 1), qui est responsable de :
- démarrer et arrêter les services,
- monter les systèmes de fichiers,
- configurer le réseau et l'environnement,
- gérer les dépendances entre les composants.
L'interface principale pour interagir avec systemd est l'utilitaire *****systemctl******.
Syntaxe de base¶
Remarque
Dans la plupart des cas, l'utilisation de systemctl nécessite des privilèges superutilisateur — utilisez sudo.
Affichage de l'état des services¶
| Tâche | Commande |
|---|---|
| Lister les unités actives (services, sockets, minuteries, etc.) | systemctl list-units |
| Uniquement les services en cours d'exécution | systemctl list-units --type=service |
| Tous les services (y compris arrêtés et inactifs) | systemctl list-units --type=service --all |
| Lister les services en cours d'exécution | systemctl list-units --type=service --state=running |
| Rechercher un service spécifique (par ex. nginx) | systemctl list-units '*nginx*' |
| Informations détaillées sur un service | systemctl status nginx (avec journaux, PID, dépendances) |
Remarque
Ajoutez --no-pager pour empêcher la pagination de la sortie (par ex. systemctl status nginx --no-pager).
Gestion du fonctionnement des services¶
Nous utiliserons nginx comme exemple, mais les commandes s'appliquent à n'importe quel service : sshd, postgresql, clamav-daemon, docker, etc.
| Action | Commande | Remarque |
|---|---|---|
| Vérifier l'état | sudo systemctl status nginx | Affiche s'il est en cours d'exécution, son PID, les journaux récents et les erreurs |
| Démarrer | sudo systemctl start nginx | Démarre le service jusqu'au prochain redémarrage |
| Arrêter | sudo systemctl stop nginx | |
| Redémarrer | sudo systemctl restart nginx | Arrêt complet > démarrage (s'il n'est pas en cours d'exécution, il démarrera) |
| Recharger la configuration sans arrêter | sudo systemctl reload nginx | Fonctionne si le service prend en charge SIGHUP (nginx, Apache, Postfix, etc.) |
| Recharger ou redémarrer | sudo systemctl reload-or-restart nginx | Utilise restart si reload n'est pas pris en charge |
| Tenter un redémarrage (uniquement si en cours d'exécution) | sudo systemctl try-restart nginx | Sécurisé pour les scripts |
| Vérifier si le service est actif | systemctl is-active nginx | Sortie : active / inactive / unknown |
| Vérifier si le service a échoué | systemctl is-failed nginx | Sortie : failed si le service s'est terminé avec une erreur |
Remarque
Après start/restart, le service ne démarrera pas automatiquement au redémarrage — le démarrage automatique nécessite une configuration séparée.
Gestion du démarrage automatique¶
| Action | Commande | Ce qui se passe |
|---|---|---|
| Activer le démarrage automatique | sudo systemctl enable nginx | Crée un lien symbolique de /usr/lib/systemd/system/nginx.service vers /etc/systemd/system/multi-user.target.wants/ |
| Désactiver le démarrage automatique | sudo systemctl disable nginx | Supprime le lien symbolique mais n'arrête pas le processus en cours d'exécution |
| Vérifier l'état du démarrage automatique | systemctl is-enabled nginx | Valeurs possibles : enabled, disabled, static, masked |
| Réinitialiser les paramètres > réactiver | sudo systemctl reenable nginx | Efface les substitutions précédentes et réactive le service |
| Réinitialiser aux valeurs par défaut | sudo systemctl preset nginx | Annule tous les paramètres personnalisés pour revenir aux valeurs par défaut de la distribution (rarement utilisé) |
Fonctionnalités avancées¶
1. Forcer le rechargement de la configuration systemd¶
Si vous avez modifié un fichier .service :
2. Afficher les dépendances¶
3. Journal du service (via journalctl)¶
4. Masquer un service (désactivation complète, même manuelle)¶
Commandes utiles pour l'utilisation quotidienne¶
# Vérifier rapidement si le service est activé et en cours d'exécution
systemctl is-active --quiet nginx && echo "OK" || echo "STOPPED"
# Démarrer et activer le démarrage automatique avec une seule commande
sudo systemctl start nginx && sudo systemctl enable nginx
# Désactiver et arrêter le service
sudo systemctl stop nginx && sudo systemctl disable nginx
Remarque
L'indicateur --now (disponible depuis systemd v220+, 2015) effectue enable + start ou disable + stop simultanément.