Aller au contenu

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

systemctl [options] commande [service]

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 :

sudo systemctl daemon-reload
sudo systemctl restart nginx

2. Afficher les dépendances

systemctl list-dependencies nginx

3. Journal du service (via journalctl)

journalctl -u nginx

4. Masquer un service (désactivation complète, même manuelle)

sudo systemctl mask nginx
sudo systemctl unmask nginx

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.