Comment lister tous les services en cours d'exécution avec systemctl ?

Publié 27 août 2024

Problème : Visualiser les services actifs sous Linux

La gestion des services sur un système Linux est une tâche pour les administrateurs et les utilisateurs. Systemctl, la commande principale pour contrôler systemd, offre un moyen de gérer et de surveiller ces services. Obtenir une vue d'ensemble de tous les services en cours d'exécution peut être difficile sans connaître les bonnes commandes et options à utiliser.

Lister tous les services en cours d'exécution avec Systemctl

Commande de base pour lister les services

Pour lister tous les services gérés par systemd, utilisez cette commande :

systemctl list-units --type=service

Cette commande affiche un tableau avec des informations sur chaque unité de service. La sortie comprend :

  • UNIT : Le nom de l'unité de service
  • LOAD : Si la définition de l'unité a été chargée
  • ACTIVE : L'état d'activation de haut niveau de l'unité
  • SUB : L'état d'activation de bas niveau de l'unité
  • DESCRIPTION : Une brève description de l'objectif de l'unité

Pour afficher uniquement les services actifs, ajoutez l'option --state=active :

systemctl list-units --type=service --state=active

Filtrer les services en cours d'exécution

Pour lister uniquement les services en cours d'exécution, utilisez :

systemctl list-units --type=service --state=running

Cette commande filtre les services inactifs ou défaillants, ne montrant que ceux en cours d'exécution sur votre système.

Pour une vue plus compacte, utilisez l'option --no-pager :

systemctl list-units --type=service --state=running --no-pager

Cela empêche la pagination de la sortie, ce qui est utile lorsque vous voulez rediriger les résultats vers d'autres commandes ou fichiers.

Pour un aperçu rapide des services en cours d'exécution sans détails supplémentaires, utilisez :

systemctl list-units --type=service --state=running --plain --no-legend

Cette commande supprime les informations d'en-tête et de pied de page, fournissant une liste claire des services en cours d'exécution.

Pour compter le nombre de services en cours d'exécution, redirigez la sortie vers wc :

systemctl list-units --type=service --state=running --plain --no-legend | wc -l

Cette commande retournera le nombre total de services en cours d'exécution sur votre système.

Conseil: Trier les services en cours d'exécution par utilisation de mémoire

Pour comprendre quels services utilisent le plus de ressources, vous pouvez trier les services en cours d'exécution par utilisation de mémoire. Cela peut aider les administrateurs système à optimiser les performances du système.

Voici une commande pour lister les services en cours d'exécution triés par utilisation de mémoire :

systemctl list-units --type=service --state=running --no-pager | awk '{print $1}' | xargs -I {} systemctl status {} | grep Memory | sort -rnk 3 | head -n 10

Cette commande :

  1. Liste tous les services en cours d'exécution
  2. Extrait les noms des services
  3. Obtient le statut de chaque service
  4. Filtre pour la ligne d'utilisation de la mémoire
  5. Trie les résultats par utilisation de mémoire (du plus élevé au plus bas)
  6. Affiche les 10 services consommant le plus de mémoire

La sortie ressemblera à ceci :

Memory: 1.2G
Memory: 800.5M
Memory: 456.3M
Memory: 234.1M
Memory: 189.7M
Memory: 156.2M
Memory: 98.4M
Memory: 76.9M
Memory: 54.3M
Memory: 43.8M

Commandes Systemctl avancées pour la gestion des services

Afficher des informations détaillées sur un service

Pour obtenir plus d'informations sur un service, utilisez la commande systemctl status suivie du nom du service :

systemctl status nom_du_service

Cette commande fournit un aperçu du service, incluant :

  • État actuel (actif, inactif, défaillant)
  • PID principal (ID du processus)
  • Utilisation de la mémoire
  • Utilisation du CPU
  • Heure de démarrage
  • Entrées de journal récentes

Exemple: Afficher les détails du service SSH

systemctl status sshd

La sortie inclut le statut actuel du service, l'emplacement du fichier de configuration et les entrées de journal récentes, ce qui aide au dépannage.

Vérifier l'état d'un service

Pour vérifier l'état d'un service, utilisez :

systemctl is-active nom_du_service

Cette commande renvoie "active" si le service est en cours d'exécution, ou "inactive" s'il ne l'est pas.

Pour vérifier si un service démarre au démarrage :

systemctl is-enabled nom_du_service

Cela renvoie "enabled" si le service démarre automatiquement au démarrage, ou "disabled" s'il ne le fait pas.

Vous pouvez également utiliser la commande systemctl show pour obtenir des propriétés spécifiques d'un service :

systemctl show -p ActiveState nom_du_service
systemctl show -p UnitFileState nom_du_service

Ces commandes affichent l'état actif actuel et si le service est activé.

Pour lister tous les services défaillants :

systemctl --failed --type=service

Cette commande aide à identifier les services qui ont des problèmes et qui peuvent nécessiter une attention particulière.

Méthodes alternatives pour lister les services

Utilisation de la commande PS

La commande ps offre une autre façon de lister les services en cours d'exécution sous Linux. Bien que moins détaillée que systemctl, elle peut donner une vue rapide des processus actifs, y compris les services.

Pour lister tous les processus en cours d'exécution, y compris les services :

ps aux

Cette commande affiche tous les processus pour tous les utilisateurs dans un format détaillé. Pour filtrer des services spécifiques, vous pouvez utiliser grep :

ps aux | grep nom_du_service

Pour une vue ciblée des services, vous pouvez utiliser :

ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head

Cette commande affiche l'ID du processus, l'ID du processus parent, la commande, l'utilisation de la mémoire et l'utilisation du CPU, triés par utilisation de la mémoire.

Par rapport à systemctl, ps fournit :

  • Des informations en temps réel sur les processus
  • Des données plus détaillées sur l'utilisation des ressources
  • La capacité de voir les processus non gérés par systemd

Cependant, il manque des informations spécifiques à systemd comme les états des services et les dépendances.

Conseil: Sortie PS personnalisée

Vous pouvez personnaliser la sortie de ps pour afficher uniquement les informations dont vous avez besoin. Par exemple, pour afficher seulement le PID, le nom de la commande et l'utilisation de la mémoire des processus, utilisez :

ps -eo pid,comm,%mem --sort=-%mem | head

Cette commande trie les processus par utilisation de mémoire et affiche les 10 processus consommant le plus de mémoire.

Utilisation de la commande Top

La commande top donne une vue dynamique et en temps réel des processus en cours d'exécution, y compris les services. Pour utiliser top :

top

Cela ouvre un affichage interactif montrant :

  • Un résumé du système (temps de fonctionnement, charge moyenne, utilisation du CPU)
  • Une liste des processus (triés par utilisation du CPU par défaut)

Pour se concentrer sur les services, vous pouvez utiliser :

top -c -p $(pgrep -d',' -f nom_du_service)

Cette commande montre uniquement les processus liés au service spécifié.

Avantages de l'utilisation de top :

  • Mises à jour en temps réel des informations sur le système et les processus
  • Interface interactive pour trier et filtrer
  • Capacité à voir les tendances d'utilisation des ressources au fil du temps

Les limitations incluent :

  • Moins d'informations spécifiques aux services par rapport à systemctl
  • Peut nécessiter plus de ressources système pour une surveillance continue

ps et top complètent systemctl en fournissant différentes vues sur les services et processus en cours d'exécution, permettant une meilleure compréhension de l'activité du système.

Exemple: Surveillance du serveur web Apache

Pour surveiller le serveur web Apache en utilisant top, vous pouvez utiliser :

top -c -p $(pgrep -d',' -f apache2)

Cette commande affichera des informations en temps réel sur tous les processus Apache, y compris leur utilisation du CPU et de la mémoire. C'est utile pour suivre la consommation de ressources d'Apache pendant les périodes de trafic élevé.