Commandes Systemctl : Comment redémarrer, recharger et arrêter les services dans Linux
La gestion efficace des services est l’une des compétences les plus critiques pour tout administrateur système Linux. Que vous exécutiez un serveur web à fort trafic sur un plan VPS Hosting ou que vous mainteniez un environnement Dedicated Server, comprendre comment contrôler les services système à l’aide de systemctl est absolument essentiel. Ce guide complet couvre tout ce que vous devez savoir sur le redémarrage, le rechargement et l’arrêt des services dans Linux à l’aide de systemd et systemctl.
Qu’est-ce que systemd et pourquoi est-ce important ?
systemd est le système init par défaut et le gestionnaire de services utilisé dans pratiquement toutes les distributions Linux modernes, notamment Ubuntu, Debian, CentOS, Rocky Linux, AlmaLinux et Fedora. Il a remplacé les anciens systèmes init comme SysVinit et Upstart, apportant des améliorations significatives à la façon dont Linux démarre et gère les processus.
Caractéristiques clés de systemd
- Démarrage parallèle des services — Réduit considérablement les temps de démarrage en lançant les services simultanément
- Activation des services à la demande — Les services peuvent être lancés uniquement si nécessaire, économisant les ressources système
- Gestion des dépendances — Gère automatiquement les dépendances et l’ordre des services
- Journalisation centralisée — S’intègre avec
journaldpour une gestion des journaux unifiée et structurée - Contrôle des ressources basé sur Cgroup — Suit et limite l’utilisation du CPU, de la mémoire et des E/S par service
- Activation Socket et D-Bus — Permet des modèles avancés de communication inter-processus
Comprendre systemd n’est pas qu’académique — cela impacte directement la stabilité, les performances et la sécurité de votre environnement Linux.
Qu’est-ce que systemctl ?
systemctl est l’interface de ligne de commande principale pour interagir avec systemd. Il permet aux administrateurs de :
- Démarrer, arrêter, redémarrer et recharger les services
- Activer ou désactiver les services au démarrage
- Vérifier l’état du service et afficher les journaux
- Gérer les cibles système (niveaux d’exécution)
- Recharger la configuration du démon
systemd
Toutes les commandes systemctl qui modifient l’état du système nécessitent des privilèges root ou un accès sudo.
Commandes systemctl principales pour la gestion des services
1. Redémarrage d’un service
Redémarrer un service l’arrête complètement puis le relance. C’est l’opération à utiliser quand :
- Vous avez apporté des modifications de configuration qui nécessitent un redémarrage complet du processus
- Un service s’est écrasé ou est devenu non réactif
- Vous devez appliquer des fichiers binaires mis à jour après une mise à niveau de paquet
Syntaxe :
sudo systemctl restart <service_name>Exemple — Redémarrer le serveur web Nginx :
sudo systemctl restart nginxExemple — Redémarrer le serveur web Apache :
sudo systemctl restart apache2Exemple — Redémarrer la base de données MySQL/MariaDB :
sudo systemctl restart mysql> Important : Redémarrer un service provoque une brève interruption. Pour les environnements de production, envisagez d’utiliser reload si supporté pour éviter les temps d’arrêt.
2. Rechargement d’un service
Le rechargement ordonne à un service en cours d’exécution de relire ses fichiers de configuration sans arrêter le processus. C’est idéal pour appliquer les modifications de configuration sans aucun temps d’arrêt.
Syntaxe :
sudo systemctl reload <service_name>Exemple — Recharger Nginx après modification de sa configuration :
sudo systemctl reload nginxExemple — Recharger le démon SSH après modification de sshd_config :
sudo systemctl reload sshd> Remarque : Tous les services ne supportent pas l’opération reload. Si un service ne l’implémente pas, systemctl retournera une erreur. Dans ces cas, utilisez restart à la place.
Conseil professionnel — Utilisez reload-or-restart pour une compatibilité maximale :
sudo systemctl reload-or-restart <service_name>Cette commande tente d’abord un rechargement. Si le service ne supporte pas le rechargement, elle bascule automatiquement vers un redémarrage complet — ce qui en fait l’option la plus sûre pour les déploiements scriptés et l’automatisation.
3. Arrêt d’un service
L’arrêt d’un service le termine immédiatement. Utilisez ceci quand vous devez mettre un service hors ligne pour la maintenance, le dépannage ou la reconfiguration.
Syntaxe :
sudo systemctl stop <service_name>Exemple — Arrêter le serveur web Nginx :
sudo systemctl stop nginxExemple — Arrêter le service de pare-feu :
sudo systemctl stop ufw> Avertissement : L’arrêt d’un service critique (comme sshd sur un serveur distant) peut vous verrouiller hors de votre système. Assurez-vous toujours d’avoir une méthode d’accès alternative, comme une console ou une gestion hors bande, avant d’arrêter les services essentiels.
4. Démarrage d’un service
Si un service n’est pas actuellement en cours d’exécution, utilisez la commande start pour le lancer.
Syntaxe :
sudo systemctl start <service_name>Exemple :
sudo systemctl start nginx5. Activation d’un service au démarrage
L’activation d’un service crée les symlinks nécessaires pour que systemd le démarre automatiquement lors du démarrage du système.
Syntaxe :
sudo systemctl enable <service_name>Exemple :
sudo systemctl enable nginxActiver et démarrer simultanément (recommandé) :
sudo systemctl enable --now nginx6. Désactivation d’un service au démarrage
La désactivation d’un service l’empêche de démarrer automatiquement, mais ne l’arrête pas s’il est actuellement en cours d’exécution.
Syntaxe :
sudo systemctl disable <service_name>Exemple :
sudo systemctl disable bluetoothDésactiver et arrêter simultanément :
sudo systemctl disable --now bluetooth7. Vérification de l’état du service
La commande status est l’une des commandes systemctl les plus fréquemment utilisées. Elle fournit un aperçu en temps réel de l’état d’un service, y compris les entrées de journal récentes.
Syntaxe :
sudo systemctl status <service_name>Exemple — Vérifier l’état de Nginx :
sudo systemctl status nginxExemple de sortie :
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2024-01-15 10:23:45 UTC; 2h 34min ago
Docs: man:nginx(8)
Process: 1234 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 1235 (nginx)
Tasks: 3 (limit: 4915)
Memory: 6.2M
CPU: 45ms
CGroup: /system.slice/nginx.service
├─1235 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
└─1236 "nginx: worker process"La sortie inclut :
- Loaded — Si le fichier d’unité est chargé et s’il est activé au démarrage
- Active — État d’exécution actuel (
active (running),inactive (dead),failed, etc.) - Main PID — L’ID de processus principal du service
- Memory/CPU — Métriques de consommation des ressources
- CGroup — La hiérarchie du groupe de contrôle
- Recent logs — Dernières entrées du journal pour un diagnostic rapide
Commandes systemctl avancées
Vérification si un service est actif ou activé
Pour utilisation dans les scripts et l’automatisation, ces commandes retournent des codes de sortie de style booléen simples :
# Check if a service is currently running
systemctl is-active nginx
# Check if a service is enabled at boot
systemctl is-enabled nginx
# Check if a service has failed
systemctl is-failed nginxListe de tous les services
# List all loaded and active units
systemctl list-units --type=service
# List all installed unit files and their states
systemctl list-unit-files --type=service
# List only failed services
systemctl --failedRechargement du démon systemd
Après la création ou la modification de fichiers d’unité, vous devez recharger le démon systemd pour reconnaître les modifications :
sudo systemctl daemon-reloadMasquage et démasquage d’un service
Le masquage d’un service l’empêche d’être démarré manuellement ou automatiquement — même par d’autres services :
# Prevent a service from ever starting
sudo systemctl mask <service_name>
# Re-enable a masked service
sudo systemctl unmask <service_name>Référence rapide : Aide-mémoire des commandes systemctl
| Commande | Description |
|---|---|
systemctl start <service> | Démarrer un service arrêté |
systemctl stop <service> | Arrêter un service en cours d’exécution |
systemctl restart <service> | Arrêter et redémarrer un service |
systemctl reload <service> | Recharger la configuration sans arrêter |
systemctl reload-or-restart <service> | Recharger si supporté, sinon redémarrer |
systemctl enable <service> | Activer le service au démarrage |
systemctl disable <service> | Désactiver le service au démarrage |
systemctl enable --now <service> | Activer et démarrer immédiatement |
systemctl disable --now <service> | Désactiver et arrêter immédiatement |
systemctl status <service> | Afficher l’état du service et les journaux |
systemctl is-active <service> | Vérifier si le service est en cours d’exécution |
systemctl is-enabled <service> | Vérifier si le service démarre au démarrage |
systemctl is-failed <service> | Vérifier si le service a échoué |
systemctl list-units --type=service | Lister tous les services actifs |
systemctl --failed | Lister tous les services ayant échoué |
systemctl daemon-reload | Recharger les fichiers d’unité systemd |
systemctl mask <service> | Empêcher complètement le démarrage du service |
systemctl unmask <service> | Retirer le masque du service |
Cas d’usage pratiques pour les administrateurs de serveurs
Scénario 1 : Application des modifications de configuration Nginx
Vous avez modifié /etc/nginx/nginx.conf sur votre serveur web. Pour appliquer les modifications sans interrompre les connexions actives :
# First, test the configuration syntax
sudo nginx -t
# If the test passes, reload gracefully
sudo systemctl reload nginxScénario 2 : Récupération d’un service défaillant
Un service s’est écrasé et affiche un état failed :
# Check what went wrong
sudo systemctl status myapp.service
# View full logs for the service
sudo journalctl -u myapp.service -n 50 --no-pager
# Restart the service
sudo systemctl restart myapp.serviceScénario 3 : Configuration d’un nouveau service après déploiement
Après le déploiement d’une nouvelle application avec un fichier d’unité personnalisé :
# Reload systemd to recognize the new unit file
sudo systemctl daemon-reload
# Enable and start the service in one command
sudo systemctl enable --now myapp.service
# Verify it's running correctly
sudo systemctl status myapp.serviceDifférence entre restart, reload et stop — En un coup d’œil
| Action | Processus arrêté ? | Temps d’arrêt ? | Cas d’usage |
|---|---|---|---|
stop | Oui | Oui | Maintenance, dépannage |
restart | Oui, puis redémarré | Bref | Modifications de configuration nécessitant un redémarrage complet |
