La gestion efficace des services système est primordiale pour maintenir un environnement Linux stable et performant. Que vous soyez administrateur système ou utilisateur averti, savoir comment lister et gérer tous les services avec systemctl est une compétence essentielle. Cet outil puissant offre une vision complète de l’état de votre système et permet un contrôle précis sur chaque service — de manière bien plus structurée que les approches traditionnelles.
Niveau : 🟢 Intermédiaire · Système : 🐧 Linux systemd · Usage : ⚙️ Administration
Lister tous les services en cours d’exécution avec systemctl
La commande systemctl est l’outil de prédilection pour obtenir une vue d’ensemble des services sur un système Linux moderne basé sur systemd. Sa syntaxe de base pour lister les services est simple et efficace :
systemctl list-units –type=service
Cette commande affiche par défaut les services actuellement chargés et actifs. Pour une analyse plus approfondie — et c’est là que réside tout l’intérêt de la manière dont systemctl structure ses options — plusieurs paramètres peuvent être ajoutés :
- –all : inclut les services inactifs dans la liste, ce qui permet d’avoir une définition exhaustive de l’état de chaque unité
- –no-pager : affiche la sortie complète sans pagination, pratique pour rediriger vers un fichier ou un script
- –state=active ou –state=running : filtre les services selon leur état exact
- –plain –no-legend : produit une sortie épurée sans en-tête ni pied de page, idéale pour un usage scripté
La sortie de cette commande fournit des informations cruciales sur chaque service, organisées de manière lisible :
| Colonne | Description |
|---|---|
| Nom du service | Identifiant unique de l’unité systemd |
| État de chargement | Indique si le service est chargé en mémoire (loaded) |
| État d’activation | Montre si le service est actif ou inactif (active/inactive) |
| Sous-état | Fournit des détails supplémentaires : running, exited, failed |
| Description | Brève explication de la fonction du service |
💡 Notre conseil
Pour obtenir uniquement les noms bruts des services actifs — par exemple pour les passer en argument à un autre script — combinez : systemctl list-units –type=service –state=running –plain –no-legend | awk ‘{print $1}’. Cette manière de filtrer la sortie évite tout traitement manuel superflu.
Pour les administrateurs soucieux des performances, il est possible de croiser les informations de systemctl avec des outils comme systemd-analyze blame, qui liste les services triés par temps de démarrage. Cette action permet d’identifier rapidement les goulots d’étranglement au boot et d’optimiser le temps de lancement du système.
⚙️ Commandes avancées pour la gestion des services
Au-delà de la simple liste, systemctl offre un arsenal de commandes avancées pour une gestion fine des services. Chaque action disponible répond à un besoin précis d’administration système.
systemctl status <service>
Cette commande fournit un aperçu complet de l’état du service, incluant son statut actuel, les processus associés (avec leur PID), la consommation mémoire, et les dernières entrées de journal — sans avoir besoin de consulter un dictionnaire de commandes séparé.
systemctl is-active <service> / systemctl is-enabled <service>
Ces commandes permettent de déterminer rapidement si un service est en cours d’exécution ou configuré pour démarrer automatiquement au boot. Utile en scripting pour conditionner une action à l’état réel d’un service.
systemctl show -p <propriété> <service>
Particulièrement utile pour les scripts d’automatisation, cette commande extrait une information précise — par exemple ExecStart, Restart, ou MemoryCurrent — sans avoir à parser toute la sortie de status.
systemctl –failed
Cette commande est cruciale pour le diagnostic rapide des problèmes système, en mettant en évidence les services dont l’état est failed. C’est souvent le premier réflexe à adopter après un redémarrage imprévu.
D’autres actions courantes méritent également d’être maîtrisées pour une gestion complète des services :
- systemctl start <service> — démarre un service immédiatement
- systemctl stop <service> — arrête un service en cours d’exécution
- systemctl restart <service> — redémarre le service (arrêt puis démarrage)
- systemctl reload <service> — recharge la configuration sans interrompre le service
- systemctl enable <service> — active le démarrage automatique au boot
- systemctl disable <service> — désactive le démarrage automatique
- systemctl mask <service> — empêche tout démarrage du service, même manuel
✅ À retenir
La différence entre disable et mask est fondamentale : disable retire simplement le service de l’autostart, tandis que mask crée un lien symbolique vers /dev/null, rendant le service totalement inaccessible jusqu’à ce qu’il soit démasqué via systemctl unmask. Utiliser mask avec parcimonie.

Méthodes alternatives pour lister les services
Bien que systemctl soit l’outil le plus complet pour gérer les services sous Linux, d’autres commandes peuvent offrir des perspectives complémentaires. Ces alternatives sont utiles dans les environnements sans systemd, ou pour croiser les informations obtenues de manière indépendante.
| ✅ Avantages de systemctl | ❌ Limites des alternatives |
|---|---|
| • Vue structurée par unités systemd • Filtrage natif par état, type, nom • Accès aux journaux intégrés • Gestion centralisée en une seule commande |
• ps aux liste tous les processus sans distinction service/daemon • top nécessite un filtrage manuel • Pas d’accès à l’état d’activation au boot |
1. La commande ps aux
Cette commande classique liste tous les processus en cours d’exécution, y compris les services. Elle offre une vue plus large du système, mais nécessite un filtrage manuel — par exemple avec grep — pour isoler les services d’intérêt. Son usage reste pertinent pour identifier des processus orphelins ou zombies qui n’apparaissent pas dans systemctl.
2. L’utilitaire top / htop
Top (et sa version améliorée htop) fournit une vue dynamique des processus en temps réel. C’est un outil précieux pour surveiller l’utilisation des ressources par les services et détecter les anomalies de performance — notamment une consommation CPU ou mémoire anormale sur un daemon spécifique.
3. La commande service –status-all
Sur les distributions qui conservent une compatibilité SysV init (comme certaines versions de Debian ou Ubuntu), la commande service –status-all liste l’ensemble des services disponibles avec leur état (+/-). Bien que moins précise que systemctl, elle reste utile pour une vérification rapide sur des systèmes hybrides.
⚠️ Résolution des problèmes courants avec les services
Malgré la robustesse des systèmes Linux modernes, des problèmes avec les services peuvent survenir. La bonne manière d’aborder le dépannage consiste à suivre une méthode structurée plutôt que de modifier les fichiers de configuration au hasard.
Prenons un exemple concret : un service syncthing qui échoue au démarrage sous Debian 11. Les symptômes typiques sont les suivants :
- Un code de sortie 1 lors du démarrage (status=1/FAILURE)
- Des tentatives répétées de redémarrage automatique visibles dans systemctl status
- Absence de messages d’erreur explicites dans les journaux système standard
4
étapes méthodiques pour diagnostiquer un service en échec avec systemctl
La procédure de dépannage recommandée pour ce type de situation :
- Vérification des logs avec journalctl -u syncthing (ou journalctl -xe pour le contexte complet) — c’est l’action initiale indispensable
- Examen des permissions et des chemins d’accès définis dans le fichier unit (/etc/systemd/system/syncthing.service)
- Test du démarrage manuel du service pour observer les erreurs en temps réel : sudo -u <user> /usr/bin/syncthing
- Vérification des dépendances du service et de leur état via systemctl list-dependencies syncthing
⚠️ À garder en tête
Après toute modification d’un fichier .service, il est impératif d’exécuter systemctl daemon-reload avant de tenter un redémarrage du service. Sans cette action, systemd continue d’utiliser la version précédente de la configuration en mémoire, ce qui peut générer des comportements inattendus difficiles à diagnostiquer.
Cette approche méthodique, combinée à une compréhension approfondie des commandes systemctl, permet de résoudre efficacement la plupart des problèmes de services sous Linux. En maîtrisant ces techniques de listing et de gestion des services, vous serez en mesure de maintenir un système Linux sain et performant — que ce soit pour le diagnostic, l’optimisation des performances, ou simplement pour garder un œil vigilant sur votre environnement de production.
Questions fréquentes
Quelle est la différence entre systemctl list-units et systemctl list-unit-files ?
systemctl list-units affiche les unités actuellement chargées en mémoire par systemd (actives ou inactives depuis le dernier démarrage), tandis que systemctl list-unit-files liste tous les fichiers d’unités installés sur le système, qu’ils aient été chargés ou non. La seconde commande permet notamment de voir quels services sont activés (enabled) ou désactivés (disabled) pour le démarrage automatique, indépendamment de leur état actuel.
Comment voir les logs d’un service spécifique avec systemd ?
Utilisez la commande journalctl -u nom-du-service pour afficher les journaux d’un service spécifique. Ajoutez -f pour suivre les logs en temps réel (équivalent de tail -f), ou -n 50 pour n’afficher que les 50 dernières lignes. Pour les erreurs récentes avec contexte système complet, journalctl -xe est particulièrement utile lors du diagnostic d’un service en échec.
Est-ce que systemctl fonctionne sur toutes les distributions Linux ?
systemctl est disponible sur toutes les distributions Linux qui utilisent systemd comme système d’init — ce qui inclut la grande majorité des distributions modernes : Debian 8+, Ubuntu 15.04+, Fedora, Red Hat Enterprise Linux 7+, CentOS 7+, Arch Linux et leurs dérivés. Des distributions comme Alpine Linux, Void Linux ou Gentoo (par défaut) utilisent des systèmes d’init alternatifs (OpenRC, runit) et ne disposent pas de systemctl.
Comment empêcher définitivement un service de démarrer sous Linux ?
Pour empêcher définitivement un service de démarrer — même si une autre unité tente de l’activer en tant que dépendance — utilisez systemctl mask nom-du-service. Cette commande crée un lien symbolique vers /dev/null, rendant le service inaccessible. Pour simplement désactiver le démarrage automatique au boot sans bloquer les démarrages manuels, préférez systemctl disable nom-du-service. Pour annuler un masquage, utilisez systemctl unmask.
Comment lister uniquement les services qui consomment le plus de ressources ?
Pour identifier les services les plus gourmands au démarrage, utilisez systemd-analyze blame qui liste les unités triées par temps d’initialisation. Pour surveiller la consommation mémoire en temps réel, systemctl status nom-du-service affiche le champ Memory. La commande systemd-cgtop offre une vue dynamique similaire à top, mais organisée par groupe de contrôle systemd, ce qui permet de visualiser la consommation par service de manière précise.