systemd systemctl journalctl

systemd systemctl journalctl

Notes › _DIFFUSION

---
title:
  name:
  level:
  center:
exclude:
style:
  listType:
omit:
levels:
  min:
  max:
---

# Table of Contents

- Comment utiliser systemctl sur Linux
- Systemctl Linux : utilisation et exemples
    - Comment lister tous les services avec leurs statuts
    - Comment afficher le statut d’un service : démarré, arrêté, failed
    - Comment afficher la configuration d’un service avec systemctl
    - Comment démarrer, arrêter, recharger, redémarrer un service avec systemctl
    - Comment recharger la configuration d’un service avec systemctl daemon-reload
    - Comment activer un service au démarrage avec systemctl
    - Comment désactiver un service au démarrage avec systemctl
    - Comment afficher les services en erreur
    - Comment lister les dépendances d’un service
    - Comment masquer un service avec systemd
- Vérifier et dépanner les services Linux
- Comment utiliser journalctl pour voir et manipuler les journaux Systemd
    - Comment consulter les journaux Linux avec journalctl
    - Afficher les journaux en inversé
    - Lire le journal de démarrage du système linux
    - Filtrer les journaux sur le temps
    - Afficher les entrées dont le MESSAGE correspond à un PATTERN
    - Afficher les journaux d’un daemon
    - Filtrer les journaux sur un utilisateur
    - Visualiser les journaux du noyau Linux
    - Afficher les erreurs dans les journaux
    - Afficher les journaux d’un service/daemon en particulier
    - Utiliser l’option tail avec journalctl
    - Changer le format de sortie
    - Visualiser l’espace disque utilisé par les journaux
    - Fixer la taille et le nombre de journaux
- Diagnostiquer un service qui ne fonctionne plus
- Vérifier et dépanner un service sous Linux avec systemctl et journalctl
    - Lister les services Linux
    - Vérifier les services en échec
    - Vérifier un service en particulier
    - Comprendre l’état Active
    - Repérer le code d’erreur
    - Consulter les services qui ont échoué après le démarrage
- Consulter les logs d’un service
    - Afficher les derniers événements
    - Afficher les logs depuis une période précise
    - Suivre les logs en temps réel
    - Rechercher les erreurs importantes
- Activer ou désactiver un service au démarrage
    - Activer un service au démarrage
    - Désactiver un service au démarrage
    - Ne pas confondre disable et mask
- Vérifier pourquoi un service ne démarre pas
    - Vérifier si un port est déjà utilisé
    - Vérifier les permissions
    - Rechercher un manque de mémoire ou un crash
- Vérifier la configuration avant de redémarrer un service
- Réinitialiser l’état failed d’un service
- Vérifier les dépendances d’un service
    - Rechercher les dépendances inverses
    - Comprendre les relations entre les unités
- Vérifier le fichier unit systemd
    - Identifier l’emplacement du fichier unit
    - Vérifier les personnalisations d’un service
- Recharger systemd après modification d’un service
    - Ne pas confondre daemon-reload, reload et restart
- Tableau des commandes systemctl pour dépanner un service

Comment utiliser systemctl sur Linux

Voici la syntaxe de la commande systemctl :

1
systemctl [commande] [Nom service]

La liste des commandes possibles :

   
Commandes Description
list-units Lister les unités systemd
start Démarrer un service
stop Arrêter un service
mask Masquer un service
status Vérifier le statut du service
restart Redémarrer le service
reload Recharger un ou plusieurs services
reload-or-restart Recharger le service sinon le redémarrer
try-restart Redémarre le service si actif
kill Envoie un signal aux processus de l’unité/service comme la commande kill
Utilisez –kill-who= pour sélectionner à quel processus envoyer le signal
Utilisez –signal= pour sélectionner le signal à envoyer
daemon-reload Recharger la configuration des services
reload-or-restart Recharger une ou plusieurs unités s’ils le soutiennent
is-active Vérifie si le service/unité est actif
is-failed Vérifie si le service a le statut failed
show Affiche la configuration et les propriétés d’une unité/service
edit Editer le fichier de configuration de l’unité/service
clean Nettoyer les runtime, cache, state, logs ou configuration de l’unité

Les principales commandes sur les unités/services de systemctl

Plus de commandes avec :

1
systemctl --help

Systemd utilise un concept d’unit, qui peut être un service, sockets, point de montage, périphériques, etc.
Les fichiers de configuration sont stockés dans /lib/systemd/system/

Systemctl Linux : utilisation et exemples

Comment lister tous les services avec leurs statuts

La commande systemctl permet d’interroger systemd afin de connaître la liste des unités (dont les services) et leurs états.
Pour lister tous les unités quelques soit le type, on utilise le paramètre list-units :

1
systemctl list-units 

Si l’on veut filtrer la liste par type (services, socket, …), on utilise le paramètre –type.
Par exemple pour lister les services systemd :

1
systemctl list-units --type service

Voici le contenu de la sortie :

  • UNIT : Le nom de l’unité
  • LOAD : Si le fichier de configuration de l’unité a été chargé avec susccès
  • ACTIVE : Etat du service actif/inactif
  • SUB : Sous-état de l’unité qui varie selon le type d’unité
  • DESCRIPTION : La description du service

Lister et afficher le statut des services Linux avec systemctl

Ce tableau récapitule les états possibles d’une unité et d’un service :

   
Statut Description
loaded Le fichier de configuration de l’unité a été traité et traité avec succès.
Active (exited) Exécuté avec succès la configuration ponctuelle et après l’exécution, l’appareil n’exécute ni le processus actif ni l’attente d’un événement.
Active (running) Exécutez avec succès la configuration ponctuelle et après l’exécution, l’appareil exécute un ou plusieurs processus actifs.
Active (waiting) Exécuté avec succès la configuration unique et après l’exécution, l’appareil attend un événement.
Inactive (dead) Soit la configuration ponctuelle n’a pas réussi à exécuter ou non exécuté.

Les états (states) de systemd

Pour filtrer sur un état, on utilise le paramètre –state :

1
systemctl list-units --all --state=inactive

Pour lister tous les services quelque soit leurs états :

1
systemctl list-unit-files --type service -all

Lister et afficher le statut des services Linux avec systemctl

  • UNIT File : qui est le fichier de l’unité, ici on filtre sur le type service, ainsi on a que des fichiers XXXXX.service
  • STATE : l’état du service (voir tableau ci-dessous)
  • VENDOR PRESET : la configuration par défaut

Comment afficher le statut d’un service : démarré, arrêté, failed

Comment savoir si un service est démarré, en cours de fonctionnement ou arrêté ?
Pour vérifier, systemctl fournit l’option statuts :

1
systemctl status [Nom service] 

Pour vérifier si un service a le statut actif et démarré :

1
systemctl is-active [Nom service]

Comment afficher le statut d'un service : démarré, arrêté, failed

Comment afficher la configuration d’un service avec systemctl

systemctl est aussi capable d’afficher les propriétés d’une unité et d’un service.
Pour cela on utilise la commande show comme ceci :

1
systemctl show [Nom service]

Par exemple pour afficher les propriétés du service cron :

1
systemctl show cron

La sortie affiche les propriétés et la configuration complète en liste.

Comment afficher la configuration d'un service avec systemctl

Comment démarrer, arrêter, recharger, redémarrer un service avec systemctl

La principale utilisation de systemctl dans la gestion des services est de changer le statut d’un service.
C’est à dire démarrer ou arrêter un service ou encore le redémarrer.

On utilise les trois commandes suivantes :

  • start : démarre un service
  • stop : arrête un service
  • restart : redémarre un service, ce qui équivaut à un stop puis un start
1
2
3
systemctl start [Nom service]
systemctl stop [Nom service]
systemctl restart [Nom service] 

Par exemple, pour redémarrer nginx :

1
systemctl restart nginx.service

Comment démarrer, arrêter, redémarrer un service avec systemctl

La commande reload permet de relire le fichier de configuration.
Elle est idéale après une modification de la configuration d’un service pour prendre en compte les modifications.
Étant donné que la recharge ne recharge que la configuration, elle entraînera moins de perturbation des activités existantes et des connexions actuellement ouvertes.
Les utilisateurs peuvent même ne pas remarquer que c’était couru.
Cependant, selon le serveur dont nous parlons, certaines options peuvent ne pas être modifiables à l’aide de rechargement.
Et si le serveur utilise trop de mémoire, etc., il peut être nécessaire d’utiliser le redémarrage pour le forcer à partir d’une ardoise propre.

La syntaxe est la même, ainsi pour recharger le service nginx :

1
systemctl reload nginx.service

Comment recharger la configuration d’un service avec systemctl daemon-reload

L’option daemon-reload pour recharger la configuration du gestionnaire systemd.
Cela relancera tous les générateurs rechargera tous les fichiers d’unité et recréez l’intégralité de l’arbre de dépendances. Pendant le rechargement du démon, tous les sockets
systemd écoute au nom de la configuration de l’utilisateur restera accessible.

1
systemctl daemon-reload

Comment activer un service au démarrage avec systemctl

On utilise l’option enable suivi du nom du service.
Voici la syntaxe par défaut à utiliser :

1
sudo systemctl enable SERVICE_NAME

Par exemple pour désactiver le nom du service scan de clamd :

1
systemctl enable clamd@scan.service

Comment désactiver un service au démarrage avec systemctl

De même il est possible de désactiver un service du démarrage Linux avec systemctl.
Pour cela, on utilise l’option disable comme expliqué ci-dessous :

1
sudo systemctl disable SERVICE_NAME

Par exemple pour déactiver le service clamd du démarrage de Linux :

1
systemctl disable clamd@scan.service

Comment afficher les services en erreur

Utilisez –state=failed ou –failed pour n’afficher que les unités défaillantes.

1
sudo systemctl --failed

Comment afficher les services en erreur sur Linux avec systemctl

Après avoir identifié les unités défaillantes, nous pouvons résoudre leur état en utilisant l’une des commandes suivantes :

1
systemctl reset-failed
1
systemctl reset-failed <nom service>

Comment lister les dépendances d’un service

systemctl permet aussi d’interroger un service et lister les dépendances.
Il s’agit des services nécessaires au fonctionnement de ce dernier.
Si un des services dépendants n’est pas démarré, vous ne pourrez pas démarrer le service.

1
systemctl list-dependencies --all nginx.service

Comment lister les dépendances d'un service

Comment masquer un service avec systemd

Enfin systemd propose une commande mask qui permet de masquer une unité dont un service.
Le service est alors considéré comme étant totalement désactivé.
A partir de là, il est impossible de démarrer le service.

1
systemctl mask nginx.service

systemd créé alors un lien symbolique qui fait pointer le fichier du service vers /dev/null

Le démarrage du service est impossible et on rencontre une erreur du type :

1
Failed to start nginx.service: Unit nginx.service is masked.

On utilise la commande umask pour retirer l’état masquer d’un service.
Cela réactive le service et il est alors possible de le démarrer à nouveau.

1
systemctl unmask nginx.service

Comment masquer un service avec systemd

Vérifier et dépanner les services Linux

Lorsqu’un service ne démarre plus, s’arrête de manière inattendue ou fonctionne mal, les commandes systemctl et journalctl permettent généralement d’en identifier rapidement la cause. Vous pouvez vérifier son état, rechercher les services en échec, consulter leurs journaux et détecter une erreur de configuration, un problème de permissions, une dépendance manquante, un port déjà utilisé ou un crash du processus.

Le guide suivant détaille les principales méthodes pour diagnostiquer et réparer un service géré par systemd, ainsi que les commandes à utiliser pour le démarrer, le redémarrer ou vérifier ses dépendances et son fichier unit.


Comment utiliser journalctl pour voir et manipuler les journaux Systemd

Sur Linux, les journaux (logs) sont une partie importante du système car elles vous permet d’audit, surveiller le système.
On peut aussi les utiliser pour dépanner le système ou un service qui ne fonctionne pas correctement.
Linux créé par défaut beaucoup de journaux (syslog, messages, auth, daemon, …) dans le répertoire /var/log.
Cette journalisation centralisée s’effectue à travers SystemD qui recueille et stocke des données de journalisation des noyaux, des messages de journal système, une sortie standard et une erreur pour les divers services.
Plus particulièrement, c’est le daemon journald qui gère les sources des journaux pour une sortie format syslog, JSON, …

Enfin la commande journalctl permet à l’administrateur d’interroger et consulter les journaux.
Elle permet aussi de manipuler les journaux, comme par exemple vider les journaux.
journalctl est donc important à connaître pour le débogage du système.

Comment consulter les journaux Linux avec journalctl

La commande par défaut affiche tous les journaux.
Bien entendu, on peut appliquer toutes sortes d’options pour filtrer les journaux sur une date, un service en particulier.

1
journalctl

Cela va retourner beaucoup de lignes.
JournalCtl utilise la commande less pour vous montrer les journaux.
Ce qui signifie que vous pouvez utiliser les mêmes raccourcis clavier pour vous déplacer dans les journaux que vous le faites avec la commande less.

Consulter les journaux Linux avec journalctl

Si vous ne voulez pas que les journaux soient affichés avec less, utilisez l’option –no-pager :

1
journalctl --no-pager

Cela permet notamment d’utiliser la commande grep pour filtrer.

Afficher les journaux en inversé

Comme vous l’avez remarqué, les journaux sont montrés dans l’ordre chronologique. Cela signifie que les journaux stockés les plus anciens sont affichés en premier.
Si vous souhaitez d’abord voir les journaux récents, vous pouvez afficher les journaux de journal dans l’ordre inverse avec l’option -r:

1
journalctl -r

Lire le journal de démarrage du système linux

Pour afficher les journaux du dernier démarrage de Linux (boot) :

1
journalctl -b

Pour afficher la liste des journaux de démarrages disponibles :

1
journalctl --list-boots

Cela retourne la liste des journaux disponible avec un identifiant :

1
2
3
-2 ezsdfzeerg8fds9qger4ger8ede9ver Sun 2021-08-08 22:12:23 UTC—Mon 2021-08-08 22:12:23 UTC
-1 e5f4ds5ferhtrh4tyj5trez6ezfer8d Mon 2021-08-09 11:22:13 UTC—Mon 2021-08-09 11:22:13 UTC
0 cf61e3c7347b41308468e0431ee77ade Mon 2021-08-09 16:39:41 UTC—Mon 2021-08-09 16:42:27 UTC

Pour voir les journaux du démarrage précédent de Linux, on utilise l’option -b=-X.
Réduisez le chiffre pour remontrer aux journaux des boots précédents selon les disponibilités.
Par exemple :

1
journalctl -b=-1

Notez que l’on peut aussi afficher les logs du démarrage de Linux via l’identifiant :

1
journalctl -b e5f4ds5ferhtrh4tyj5trez6ezfer8d

Filtrer les journaux sur le temps

Mais on peut aussi remonter dans les logs précédents pour un service en particulier grâce à l’option -S (Since).
Par exemple, vous pouvez visualiser les journaux du jour, de la veille, 1h ou deux jours avant.

1
2
3
4
5
6
journalctl -S today
journalctl -S yesterday
journalctl --since "5 minutes ago"
journalctl --since "25 minutes ago"
journalctl -S "1 hour ago"
journalctl -S "2 days ago"

Enfin vous pouvez spécifier un intervalle de date avec l’option -S (since) et -U (until).

1
journalctl -S "2020-01-16 18:00:00" -U "2020-01-17 23:00:00"

Notez que l’on peut aussi utiliser les options avec le nom complet, par exemple :

1
journalctl --since=yesterday --until=now

Afficher les entrées dont le MESSAGE correspond à un PATTERN

Vous pouvez utiliser l’option -g si vous souhaitez afficher les journaux avec un mot en particulier.
Par exemple, ci-dessous, je souhaite afficher que les journaux correspondant au mot nvidia :

1
journalctl -b -g nvidia

journalctl : Afficher les entrées dont le MESSAGE correspond à un PATTERN

Afficher les journaux d’un daemon

Vous pouvez filtrer les journaux pour n’afficher que les logs d’un daemon et service spécifique.
Par exemple, pour ne voir que les journaux du service ssd avec l’option -u (pour unit) :

1
journalctl -u ssh

Ou encore pour afficher les journaux de nginx :

1
journalctl -u nginx

Au besoin pour lister les units :

1
systemctl list-dependencies

Bien entendu, on peut combiner avec les options précédentes :

1
2
sudo journalctl -u ssh --since=yesterday
sudo journalctl -u ssh -b0

On peut aussi filtrer les logs par GID.
Pour afficher les GID :

1
2
3
4
5
6
journalctl -F _GID
1000
65534
0
115
112

Puis on utilise l’option _GID pour filtrer sur ce dernier.

1
2
3
journalctl _GID=115
-- Logs begin at Mon 2021-08-09 16:39:41 UTC, end at Tue 2021-08-10 07:31:56 UTC. --
Aug 09 16:39:55 ns320684 mysqld[622]: 2021-08-09 16:39:55 0 [Note] /usr/sbin/mysqld (mysqld 10.3.29-MariaDB-0+deb10u1) starting as process 622 ...

Filtrer les journaux sur un exécutable :

1
2
3
4
5
6
7
8
9
10
11
journalctl /usr/bin/sudo
-- Logs begin at Mon 2021-08-09 16:39:41 UTC, end at Tue 2021-08-10 07:32:40 UTC. --
Aug 09 16:42:27 ns320684 sudo[1074]:   debian : TTY=pts/0 ; PWD=/home/debian ; USER=root ; COMMAND=/usr/bin/journalctl --list-boots
Aug 09 16:42:27 ns320684 sudo[1074]: pam_unix(sudo:session): session opened for user root by debian(uid=0)
Aug 09 16:42:27 ns320684 sudo[1074]: pam_unix(sudo:session): session closed for user root
Aug 10 07:16:52 ns320684 sudo[19215]:   debian : TTY=pts/0 ; PWD=/home/debian ; USER=root ; COMMAND=/usr/bin/journalctl --vacuum-time=2d
Aug 10 07:16:52 ns320684 sudo[19215]: pam_unix(sudo:session): session opened for user root by debian(uid=0)
Aug 10 07:16:52 ns320684 sudo[19215]: pam_unix(sudo:session): session closed for user root
Aug 10 07:16:57 ns320684 sudo[19218]:   debian : TTY=pts/0 ; PWD=/home/debian ; USER=root ; COMMAND=/usr/bin/journalctl --vacuum-time=1d
Aug 10 07:16:57 ns320684 sudo[19218]: pam_unix(sudo:session): session opened for user root by debian(uid=0)
Aug 10 07:16:57 ns320684 sudo[19218]: pam_unix(sudo:session): session closed for user root

Filtrer les journaux sur un utilisateur

On récupérer l’ID de l’utilisateur avec la commande id :

1
2
debian@linux:~$ id -u debian
1000

Puis pour filtrer les journaux sur un utilisateur sur les 25 dernières minutes :

1
2
3
4
5
6
7
8
9
10
11
12
13
debian@linux:~$ journalctl _UID=1000 --since "25 minutes ago"
-- Logs begin at Mon 2021-08-09 16:39:41 UTC, end at Tue 2021-08-10 07:33:29 UTC. --
Aug 10 07:11:58 ns320684 systemd[19113]: Listening on GnuPG cryptographic agent and passphrase cache (restricted).
Aug 10 07:11:58 ns320684 systemd[19113]: Listening on GnuPG cryptographic agent (ssh-agent emulation).
Aug 10 07:11:58 ns320684 systemd[19113]: Listening on GnuPG cryptographic agent and passphrase cache (access for web browsers).
Aug 10 07:11:58 ns320684 systemd[19113]: Reached target Timers.
Aug 10 07:11:58 ns320684 systemd[19113]: Listening on GnuPG cryptographic agent and passphrase cache.
Aug 10 07:11:58 ns320684 systemd[19113]: Listening on GnuPG network certificate management daemon.
Aug 10 07:11:58 ns320684 systemd[19113]: Reached target Sockets.
Aug 10 07:11:58 ns320684 systemd[19113]: Reached target Paths.
Aug 10 07:11:58 ns320684 systemd[19113]: Reached target Basic System.
Aug 10 07:11:58 ns320684 systemd[19113]: Reached target Default.
Aug 10 07:11:58 ns320684 systemd[19113]: Startup finished in 28ms.

Visualiser les journaux du noyau Linux

Pour afficher les journaux du noyaux Linux (kernel), équivaut à la commande dmesg :

1
journalctl -k

Afficher les erreurs dans les journaux

Afficher les erreurs dans les journaux où -p 3 signifie priorité ERR, -X fournit des informations de message supplémentaires et -b signifie depuis le dernier démarrage.

1
journalctl -p 3 -xb

Afficher les erreurs dans les journaux avec journalctl

Il s’agit en fait de filtrer sur les niveaux de priorité :

Priorité Code
0 emerg
1 alert
2 crit
3 err
4 warning
5 notice
6 info
7 debug

Les priorités des journaux Linux

L’option -p prenant les intervalles de priorité, par exemple pour avoir les alertes, critiques, erreur et warning :

1
journalctl -p 1..3

Afficher les journaux d’un service/daemon en particulier

Pour afficher les erreurs des journaux pour un service en particulier, utilisez l’option -u :

1
journalctl -u sshd.service

Afficher les journaux d'un service/daemon en particulier avec journalctl

Filtrer sur un service avec l’option –no-pager et en récupérant les erreurs :

1
journalctl -u docker.service --no-pager | grep -i error

Utiliser l’option tail avec journalctl

Afficher les 100 lignes de Systemd Logs pour un service particulier (Equiv. Tail-N 100):

1
sudo journalctl -u nginx -n 100 --no-pager

Suivez les journaux SystemD pour le service (Equiv. Tail -F).
Les nouvelles lignes du journal pour le service vont alors s’afficher au fur et à mesure.

1
sudo journalctl -u nginx -f

Pour afficher les derniers journaux :

1
journalctl -xe

Changer le format de sortie

L’option -o permet de modifier le format de sortie.
Par exemple pour afficher les journaux au format JSON :

1
journalctl -b -u nginx -o json

Journalctl gère plusieurs format dont :

  • cat : texte plein
  • export : un format binaire adapté au transfert ou à la sauvegarde de données.
  • json : en JSON
  • json-pretty : JSON formaté pour une meilleure lisibilité par l’homme
  • json-sse : résultat formaté sous JSON enveloppé pour que l’événement add server-sen soit compatible
  • short : la sortie de style syslog par défaut
  • short-iso : affiche les horodatages d’horloge murale ISO 8601
  • short-monotonic : le format par défaut avec des horodatages monotones.
  • short-precise : le format par défaut avec précision à la microseconde près
  • verbose : affiche chaque champ de journal disponible pour l’entrée, y compris ceux généralement cachés en interne.

Visualiser l’espace disque utilisé par les journaux

1
journalctl --disk-usage

Fixer la taille et le nombre de journaux

Vous pouvez limiter le nombre de fichiers journaux d’archive. Disons que vous voulez avoir seulement cinq fichiers journaux.
Il supprimera les fichiers journaux d’archive les plus âgés ne laissant que le nombre spécifié de fichiers journaux.

1
journalctl --vacuum-files=5

Une autre façon est de limiter la taille du journal. Avec cela, il supprimera les fichiers journaux de journal jusqu’à ce que l’espace disque pris par les journaux de journal tombe en dessous de la taille que vous avez spécifiée.

1
sudo journalctl --vacuum-size=100M

Diagnostiquer un service qui ne fonctionne plus

Un service Linux qui passe dans l’état failed, refuse de démarrer ou s’arrête quelques secondes après son lancement peut avoir de nombreuses causes : configuration incorrecte, droits insuffisants, dépendance indisponible, port déjà occupé ou erreur de l’application.

Avec systemctl, vous pouvez contrôler l’état du service et identifier les unités en échec, tandis que journalctl permet d’examiner les messages enregistrés au moment du problème. Ces deux outils constituent donc la base du dépannage des services sur les distributions utilisant systemd.


Vérifier et dépanner un service sous Linux avec systemctl et journalctl

Lister les services Linux

Sur la plupart des distributions Linux récentes, les services sont gérés par systemd. La commande systemctl permet de les lister, vérifier leur état, les démarrer ou les arrêter et diagnostiquer les services qui rencontrent des erreurs.

Pour afficher les services actuellement chargés par systemd, utilisez :

1
systemctl list-units --type=service

La commande affiche notamment le nom du service, son état de chargement et son état d’exécution.

Colonne Description
UNIT Nom de l’unité systemd, par exemple nginx.service ou ssh.service
LOAD Indique si le fichier de configuration du service a été correctement chargé
ACTIVE État général du service : active, inactive, failed, etc.
SUB État plus précis du service : running, exited, dead, failed, etc.
DESCRIPTION Description du service

Par défaut, list-units affiche principalement les unités actuellement chargées. Pour afficher tous les services installés, y compris ceux qui ne sont pas actuellement actifs, utilisez plutôt :

1
systemctl list-unit-files --type=service

Cette commande permet également de connaître leur configuration au démarrage, avec des états tels que enabled, disabled, static ou masked.

Pour afficher uniquement les services actuellement actifs :

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

Et pour rechercher un service particulier, vous pouvez filtrer la sortie. Par exemple, pour PHP :

1
systemctl list-units --type=service | grep -i php

ou pour Nginx :

1
systemctl list-units --type=service | grep -i nginx

Enfin, si votre objectif est de rechercher directement les services rencontrant un problème, inutile de parcourir toute la liste. systemctl dispose d’une commande dédiée permettant d’afficher uniquement les unités en échec :

1
systemctl --failed

C’est cette commande qu’il est recommandé d’utiliser en premier lorsqu’un service ne fonctionne plus ou après un problème système.

Vérifier les services en échec

Lorsqu’une application ne fonctionne plus ou qu’un serveur présente un dysfonctionnement, commencez par vérifier si systemd a détecté des services en échec.

La commande suivante affiche toutes les unités actuellement dans l’état failed :

1
systemctl --failed

Vous pouvez obtenir par exemple :

1
2
UNIT                  LOAD   ACTIVE SUB    DESCRIPTION
php8.4-fpm.service    loaded failed failed The PHP 8.4 FastCGI Process Manager

Les colonnes ACTIVE et SUB indiquent ici que le service a échoué. Cela signifie que systemd a tenté de le démarrer ou de le maintenir en fonctionnement, mais qu’une erreur l’en a empêché.

Pour limiter la recherche aux services :

1
systemctl --failed --type=service

Afficher les services en échec sous Linux avec systemctl

Vérifier un service en particulier

Si vous connaissez le nom du service en panne, affichez directement son état avec :

1
systemctl status nom-du-service

Par exemple :

1
systemctl status php8.4-fpm

ou :

1
systemctl status nginx

Afficher le statut d'un service sous Linux avec systemctl

La sortie de systemctl status fournit plusieurs informations importantes :

  • Loaded : indique si l’unité systemd a été correctement chargée.
  • Active : indique si le service est actif, arrêté ou en échec.
  • Main PID : PID du processus principal lorsqu’il fonctionne.
  • Result : raison générale de l’échec.
  • Process / ExecStart : commande ayant été exécutée par systemd.
  • Les derniers messages du journal associés au service.

Vous pouvez par exemple rencontrer :

1
Active: failed (Result: exit-code)

Cela indique que le programme lancé par systemd s’est terminé avec un code de retour indiquant une erreur. Il faut alors rechercher le message qui explique pourquoi le programme s’est arrêté.

Comprendre l’état Active

Le champ Active permet de connaître rapidement la situation du service.

État Signification
active (running) Le service fonctionne normalement
active (exited) La commande du service s’est terminée correctement, mais aucun processus ne reste actif. Cela peut être normal pour certains services
inactive (dead) Le service n’est actuellement pas démarré
failed Le service a tenté de fonctionner mais a rencontré une erreur
activating Le service est en cours de démarrage
deactivating Le service est en cours d’arrêt

Un état active (exited) n’est donc pas nécessairement une erreur. Certains services de type oneshot exécutent une tâche puis se terminent normalement.

systemctl : service en échec (failure) et affichant une erreur failed

Repérer le code d’erreur

Lorsqu’un service échoue, recherchez particulièrement les lignes Result, code et status.

Par exemple :

1
Active: failed (Result: exit-code)

puis :

1
code=exited, status=1/FAILURE

Cela signifie que le programme a été lancé mais s’est terminé avec un code d’erreur.

Vous pouvez également rencontrer :

  • Result: timeout : le service n’a pas terminé son démarrage ou son arrêt dans le délai prévu.
  • Result: signal : le processus a été terminé par un signal.
  • Result: core-dump : le processus a planté et généré un core dump.
  • Result: exit-code : le programme s’est terminé avec un code d’erreur.
  • Result: watchdog : le service n’a pas répondu au mécanisme watchdog dans le délai prévu.

Les dernières lignes affichées par systemctl status donnent souvent une première indication sur l’origine du problème. Toutefois, elles ne représentent qu’une partie des journaux.

Pour obtenir l’historique complet et déterminer pourquoi le service a échoué, l’étape suivante consiste à consulter ses logs avec journalctl -u.

Consulter les services qui ont échoué après le démarrage

Après un redémarrage, il peut être utile d’exécuter :

1
systemctl --failed

Un service secondaire en échec n’indique pas nécessairement un problème grave. En revanche, si un composant essentiel comme SSH, Nginx, Apache, PHP-FPM, MariaDB/MySQL ou un service réseau apparaît dans cette liste, son échec peut expliquer directement le dysfonctionnement rencontré.

Ne redémarrez pas systématiquement le service immédiatement. Commencez plutôt par consulter son état et ses journaux, afin de conserver les informations permettant d’identifier la cause de l’échec.

La prochaine étape consiste donc à utiliser systemctl status, puis journalctl -u pour déterminer précisément pourquoi le service ne démarre plus.

Consulter les logs d’un service

La commande journalctl permet de consulter les journaux enregistrés par systemd pour un service particulier. C’est l’une des commandes les plus importantes pour comprendre pourquoi un service ne démarre pas, s’arrête brutalement ou rencontre des erreurs.

Pour afficher les journaux d’un service, utilisez l’option -u suivie du nom de l’unité :

1
sudo journalctl -u nom-du-service

Par exemple, pour Nginx :

1
sudo journalctl -u nginx

Ou pour PHP-FPM :

1
sudo journalctl -u php8.4-fpm

Consulter les logs d'un service sous Linux

Afficher les derniers événements

Lorsque le journal contient beaucoup d’entrées, utilisez l’option -e pour vous positionner directement à la fin :

1
sudo journalctl -u nginx -e

Vous pouvez également afficher uniquement les dernières lignes :

1
sudo journalctl -u nginx -n 50

Cela permet de retrouver rapidement les événements enregistrés juste avant l’arrêt ou l’échec du service.

Afficher les logs depuis une période précise

Pour limiter l’analyse aux événements récents :

1
sudo journalctl -u nginx --since "1 hour ago"

Ou depuis une date et une heure précises :

1
sudo journalctl -u nginx --since "2026-08-07 08:00:00"

Vous pouvez également définir une période :

1
sudo journalctl -u nginx --since "2026-08-07 08:00:00" --until "2026-08-07 09:00:00"

Cette méthode est particulièrement utile lorsque vous connaissez approximativement l’heure à laquelle le service est tombé en panne.

Suivre les logs en temps réel

Pour afficher les nouveaux événements au fur et à mesure qu’ils sont générés, utilisez l’option -f :

1
sudo journalctl -u nginx -f

Laissez cette commande ouverte puis, dans un autre terminal, redémarrez le service ou reproduisez le problème. Vous pourrez ainsi observer immédiatement les erreurs générées.

Utilisez Ctrl + C pour arrêter le suivi.

Rechercher les erreurs importantes

Portez notamment attention aux messages contenant :

  • failed ou failure : échec d’une opération.
  • permission denied : problème de permissions.
  • address already in use : un autre processus utilise déjà le port nécessaire.
  • out of memory ou killed process : manque de mémoire.
  • segfault ou core dumped : plantage du programme.
  • timeout : délai d’attente dépassé.
  • dependency failed : une dépendance nécessaire au service est en échec.
  • configuration error ou syntax error : erreur dans un fichier de configuration.

Il est également important de vérifier les logs propres à l’application. journalctl peut indiquer qu’un service a échoué sans contenir tous les détails. Nginx, Apache, PHP-FPM, MariaDB ou d’autres applications peuvent écrire des informations supplémentaires dans leurs propres fichiers sous /var/log/.

Après avoir identifié le message d’erreur, évitez de redémarrer le service en boucle. Vérifiez d’abord sa configuration, ses permissions, ses ports et ses dépendances afin de corriger la cause réelle de l’échec.

Activer ou désactiver un service au démarrage

Par défaut, tous les services Linux ne sont pas automatiquement lancés au démarrage du système. Avec systemd, la commande systemctl permet de vérifier si un service est configuré pour démarrer automatiquement, puis d’activer ou de désactiver ce comportement.

Pour vérifier l’état d’un service au démarrage :

1
systemctl is-enabled nom-du-service

Par exemple :

1
systemctl is-enabled nginx

La commande peut notamment retourner :

  • enabled : le service est activé au démarrage.
  • disabled : le service existe mais n’est pas activé automatiquement.
  • static : le service ne peut pas être activé directement et est généralement lancé comme dépendance d’une autre unité.
  • masked : le service est complètement bloqué et ne peut pas être démarré normalement.

Activer un service au démarrage

Pour configurer un service afin qu’il démarre automatiquement avec Linux :

1
sudo systemctl enable nom-du-service

Par exemple :

1
sudo systemctl enable nginx

La commande enable n’a pas pour rôle de démarrer immédiatement le service. Elle configure systemd afin qu’il soit lancé automatiquement lors des prochains démarrages.

Si vous souhaitez à la fois activer et démarrer immédiatement le service :

1
sudo systemctl enable --now nginx

Vous pouvez ensuite vérifier son état :

1
systemctl status nginx

Désactiver un service au démarrage

Pour empêcher le démarrage automatique d’un service :

1
sudo systemctl disable nom-du-service

Par exemple :

1
sudo systemctl disable nginx

Le service ne sera plus lancé automatiquement au prochain démarrage, mais il n’est pas arrêté immédiatement.

Pour le désactiver et l’arrêter dans la même opération :

1
sudo systemctl disable --now nginx

Ne pas confondre disable et mask

La commande disable empêche simplement le démarrage automatique. Le service peut toujours être lancé manuellement avec :

1
sudo systemctl start nginx

À l’inverse, mask bloque complètement son démarrage :

1
sudo systemctl mask nom-du-service

Une tentative de démarrage retourne alors une erreur indiquant que l’unité est masked.

Pour lever ce blocage :

1
sudo systemctl unmask nom-du-service

Utilisez mask avec prudence, car un autre service peut dépendre de l’unité que vous bloquez. Pour un simple dépannage ou pour empêcher un service de démarrer avec Linux, disable est généralement suffisant.

Vérifier pourquoi un service ne démarre pas

Lorsqu’un service refuse de démarrer, évitez de le relancer plusieurs fois sans examiner la cause de l’échec. systemctl et journalctl permettent généralement d’obtenir les premières informations nécessaires au diagnostic.

Commencez par afficher l’état du service :

1
systemctl status nom-du-service

Par exemple :

1
systemctl status nginx

Examinez particulièrement les lignes Active, Result, ExecStart et les derniers messages affichés. Un état tel que :

1
Active: failed (Result: exit-code)

indique que le programme a bien été lancé par systemd, mais qu’il s’est terminé avec une erreur.

Consultez ensuite les journaux complets du service :

1
sudo journalctl -u nom-du-service -e

Pour afficher les événements du démarrage actuel :

1
sudo journalctl -u nom-du-service -b

Les messages d’erreur permettent généralement de déterminer dans quelle direction poursuivre le diagnostic.

Message ou symptôme Cause probable Vérification
Permission denied Droits incorrects sur un fichier, répertoire ou socket Vérifier le propriétaire et les permissions avec ls -l ou namei -l
Address already in use Le port utilisé par le service est déjà occupé Identifier le processus avec ss -lntup
No such file or directory Fichier de configuration, exécutable ou autre fichier nécessaire absent Vérifier les chemins indiqués dans les logs
Configuration error / Syntax error Erreur dans un fichier de configuration Utiliser l’outil de validation fourni par l’application
Dependency failed Un service ou une unité nécessaire est en échec Examiner les dépendances avec systemctl list-dependencies
Failed with result ‘exit-code’ Le programme s’est terminé avec un code d’erreur Examiner systemctl status et journalctl -u
Failed with result ‘timeout’ Le service n’a pas démarré dans le délai prévu Rechercher un blocage, une dépendance ou une ressource inaccessible
Start request repeated too quickly Le service plante immédiatement et systemd a cessé de tenter de le redémarrer Corriger l’erreur initiale puis utiliser systemctl reset-failed
Out of memory / Killed process Processus arrêté à cause d’un manque de mémoire Vérifier la RAM, le swap et l’OOM Killer
Segmentation fault / core dumped Le programme a planté Examiner les journaux et utiliser coredumpctl

Vérifier si un port est déjà utilisé

Pour un serveur Web, une base de données, SSH ou tout autre service réseau, vérifiez que le port nécessaire n’est pas déjà occupé :

1
sudo ss -lntup

Par exemple, pour rechercher le processus utilisant le port 80 :

1
sudo ss -lntp | grep ':80 '

Si un autre programme écoute déjà sur ce port, le nouveau service peut échouer avec une erreur Address already in use.

Vérifier les permissions

Une erreur Permission denied peut provenir des droits d’un fichier de configuration, d’un répertoire, d’un certificat, d’un socket ou d’un fichier de log.

Commencez par vérifier les permissions :

1
ls -l /chemin/vers/fichier

Pour contrôler également les permissions de chaque répertoire constituant le chemin :

1
namei -l /chemin/vers/fichier

Cette dernière commande est particulièrement pratique lorsqu’un service possède les droits sur le fichier lui-même mais ne peut pas traverser l’un des répertoires parents.

Rechercher un manque de mémoire ou un crash

Si le processus disparaît immédiatement, recherchez une intervention de l’OOM Killer :

1
sudo journalctl -k | grep -i -E "oom|out of memory|killed process"

En présence d’un segfault ou d’un core dump, vérifiez également :

1
coredumpctl list

Puis affichez les informations du crash concerné avec :

1
coredumpctl info

Enfin, lorsqu’un service refuse de démarrer après une modification de sa configuration, vérifiez toujours la syntaxe avant de le redémarrer. De nombreux logiciels fournissent leur propre commande de validation, ce qui permet souvent d’identifier immédiatement la ligne ou le fichier responsable de l’erreur.

Vérifier la configuration avant de redémarrer un service

Lorsqu’un service ne fonctionne plus après la modification d’un fichier de configuration, vérifiez sa syntaxe avant de le redémarrer. De nombreux logiciels Linux disposent d’une commande permettant de valider leur configuration sans interrompre le service actuellement en cours d’exécution.

Cette précaution est particulièrement importante sur un serveur distant : une simple erreur de syntaxe dans Nginx, Apache ou SSH peut empêcher le service de redémarrer et rendre le serveur ou un site inaccessible.

Voici quelques commandes courantes :

Service Commande de vérification
Nginx sudo nginx -t
Apache (Debian/Ubuntu) sudo apache2ctl configtest
Apache (RHEL/Fedora) sudo httpd -t
PHP-FPM sudo php-fpm -t ou la commande correspondant à la version installée
OpenSSH sudo sshd -t
Postfix sudo postfix check
Samba sudo testparm

Par exemple, après avoir modifié la configuration de Nginx :

1
sudo nginx -t

Si la configuration est correcte, vous obtenez notamment :

1
2
syntax is ok
test is successful

Vous pouvez alors recharger la configuration sans interrompre les connexions existantes :

1
sudo systemctl reload nginx

Si le test retourne une erreur, ne redémarrez pas le service immédiatement. Le message indique généralement le fichier et parfois la ligne contenant l’erreur. Corrigez-la, puis relancez le test.

Pour SSH, cette précaution est encore plus importante lorsque vous administrez un serveur à distance. Après avoir modifié sshd_config, vérifiez la configuration avec :

1
sudo sshd -t

Si aucune erreur n’est affichée, la syntaxe est valide. Gardez toutefois votre session SSH actuelle ouverte jusqu’à ce que vous ayez confirmé qu’une nouvelle connexion fonctionne correctement.

Enfin, lorsque le logiciel le permet, préférez systemctl reload à restart pour une simple modification de configuration. reload demande au service de relire sa configuration sans l’arrêter complètement, tandis que restart provoque un arrêt puis un nouveau démarrage du service.

Réinitialiser l’état failed d’un service

Lorsqu’un service échoue à plusieurs reprises, systemd peut conserver son état failed, même après avoir corrigé la cause du problème. Dans certains cas, systemd peut également cesser temporairement de tenter de démarrer le service lorsque celui-ci plante plusieurs fois en peu de temps.

Vous pouvez vérifier les services actuellement en échec avec :

1
systemctl --failed

Après avoir identifié et corrigé la cause du problème, réinitialisez l’état d’échec du service avec :

1
sudo systemctl reset-failed nom-du-service

Par exemple, pour Nginx :

1
sudo systemctl reset-failed nginx

Vous pouvez ensuite tenter de démarrer à nouveau le service :

1
sudo systemctl start nginx

Puis vérifiez son état :

1
systemctl status nginx

La commande reset-failed ne répare pas le service. Elle efface simplement l’état failed enregistré par systemd ainsi que certains compteurs associés aux échecs de démarrage. Il faut donc toujours corriger l’erreur initiale avant de l’utiliser.

Cette commande est notamment utile lorsque vous rencontrez un message de ce type :

1
Start request repeated too quickly

ou :

1
Failed with result 'start-limit-hit'

Cela signifie généralement que le service a échoué plusieurs fois dans un intervalle court et que systemd a atteint sa limite de tentatives de démarrage.

Dans ce cas :

  • Consultez d’abord les erreurs avec systemctl status nom-du-service.
  • Examinez les journaux avec journalctl -u nom-du-service.
  • Corrigez la configuration, les permissions ou le problème ayant provoqué les échecs.
  • Exécutez systemctl reset-failed nom-du-service.
  • Tentez à nouveau de démarrer le service.

Pour réinitialiser l’état failed de toutes les unités systemd en échec, vous pouvez utiliser :

1
sudo systemctl reset-failed

Cette dernière commande doit surtout être utilisée après avoir vérifié les unités concernées : effacer leur état failed sans comprendre pourquoi elles ont échoué peut masquer temporairement des problèmes qui nécessitent encore une intervention.

Vérifier les dépendances d’un service

Un service Linux peut refuser de démarrer alors que sa propre configuration est correcte parce qu’une unité dont il dépend est arrêtée ou en échec. Avec systemd, ces dépendances peuvent concerner un autre service, un point de montage, un socket, un périphérique ou une cible (target).

Pour afficher les dépendances d’un service, utilisez :

1
systemctl list-dependencies nom-du-service

Par exemple :

1
systemctl list-dependencies nginx

La commande affiche l’arborescence des unités nécessaires ou associées au fonctionnement du service.

Pour afficher également les dépendances qui ne sont pas actuellement actives :

1
systemctl list-dependencies --all nginx

Si une unité apparaît en échec, vérifiez son état :

1
systemctl status nom-de-unite

Puis consultez ses journaux :

1
sudo journalctl -u nom-de-unite -e

Rechercher les dépendances inverses

Il peut également être utile de déterminer quels services dépendent d’une unité donnée. Utilisez pour cela :

1
systemctl list-dependencies --reverse nom-du-service

Par exemple :

1
systemctl list-dependencies --reverse mariadb

Cela permet d’identifier les unités susceptibles d’être affectées si MariaDB est arrêté ou en échec.

Comprendre les relations entre les unités

Pour obtenir des informations plus précises sur les dépendances déclarées par un service :

1
systemctl show nom-du-service

Vous pouvez notamment rechercher les propriétés :

  • Requires : unités nécessaires au fonctionnement du service.
  • Wants : dépendances souhaitées mais généralement moins strictes.
  • After et Before : ordre de démarrage entre les unités.
  • BindsTo : dépendance forte à une autre unité.
  • PartOf : lie certaines opérations, comme l’arrêt ou le redémarrage, à une autre unité.

Par exemple :

1
systemctl show nginx -p Requires -p Wants -p After

Si systemctl status affiche un message tel que Dependency failed for…, ne cherchez donc pas uniquement une erreur dans le service concerné. Identifiez d’abord l’unité en échec dont il dépend, puis corrigez celle-ci avant de tenter un nouveau démarrage.

Vérifier le fichier unit systemd

Chaque service géré par systemd repose sur un fichier unit (.service) qui décrit notamment la commande à exécuter, l’utilisateur utilisé, les dépendances, les conditions de redémarrage et l’ordre de lancement.

Lorsqu’un service ne démarre plus ou se comporte de manière inattendue, il peut être utile de vérifier le fichier unit réellement utilisé par systemd, notamment si celui-ci a été personnalisé.

Pour afficher la définition complète d’un service :

1
systemctl cat nom-du-service

Par exemple :

1
systemctl cat nginx

Cette commande est préférable à l’ouverture directe d’un fichier dans /etc/systemd/system/ ou /usr/lib/systemd/system/, car elle affiche la configuration réellement assemblée par systemd, y compris les éventuels fichiers de surcharge (drop-ins).

Vous pouvez notamment y retrouver les sections suivantes :

Section / directive Rôle
[Unit] Informations générales et dépendances du service
After= / Before= Ordre de démarrage par rapport aux autres unités
Requires= / Wants= Dépendances du service
[Service] Paramètres d’exécution du service
ExecStart= Commande utilisée pour démarrer le service
ExecReload= Commande utilisée lors d’un rechargement
User= / Group= Utilisateur et groupe sous lesquels le service s’exécute
Restart= Comportement à adopter lorsque le processus s’arrête
WorkingDirectory= Répertoire de travail du processus
Environment= Variables d’environnement fournies au service
[Install] Définit notamment comment le service est activé au démarrage

Identifier l’emplacement du fichier unit

Pour connaître précisément le fichier chargé par systemd :

1
systemctl show nom-du-service -p FragmentPath

Par exemple :

1
systemctl show nginx -p FragmentPath

Vous pouvez également afficher les éventuels fichiers de surcharge :

1
systemctl show nginx -p DropInPaths

Les fichiers unit fournis par les paquets sont généralement stockés dans des répertoires comme /usr/lib/systemd/system/ ou /lib/systemd/system/, tandis que les personnalisations administrateur sont généralement placées dans /etc/systemd/system/.

Vérifier les personnalisations d’un service

Un service peut fonctionner avec son fichier unit d’origine mais également avec un ou plusieurs drop-ins qui remplacent certaines directives.

La commande :

1
systemctl cat nom-du-service

permet de visualiser ces différentes sources dans un même affichage.

C’est particulièrement utile lorsqu’un service fonctionne différemment de sa configuration par défaut après une ancienne modification, une migration ou l’ajout d’une personnalisation systemd.

Pour modifier proprement les paramètres d’un service sans éditer directement le fichier fourni par le paquet, utilisez :

1
sudo systemctl edit nom-du-service

systemd crée alors une surcharge dans /etc/systemd/system/ qui ne sera pas écrasée lors d’une mise à jour du paquet.

Après toute modification d’un fichier unit ou d’un drop-in, il est nécessaire de demander à systemd de recharger ses fichiers de configuration avec systemctl daemon-reload avant de redémarrer le service.

Recharger systemd après modification d’un service

Lorsque vous modifiez un fichier unit systemd (.service) ou un fichier de surcharge (drop-in), systemd ne prend pas automatiquement en compte les changements. Il faut lui demander de relire les fichiers unit avant de redémarrer le service concerné.

Pour cela, exécutez :

1
sudo systemctl daemon-reload

Cette commande recharge la configuration de systemd et prend notamment en compte les modifications effectuées dans :

  • /etc/systemd/system/
  • /usr/lib/systemd/system/
  • /lib/systemd/system/
  • Les fichiers de surcharge créés avec systemctl edit

Après le rechargement, redémarrez le service concerné :

1
sudo systemctl restart nom-du-service

Puis vérifiez son état :

1
systemctl status nom-du-service

Par exemple, après avoir modifié une surcharge pour Nginx :

1
2
3
sudo systemctl daemon-reload
sudo systemctl restart nginx
systemctl status nginx

Ne pas confondre daemon-reload, reload et restart

Ces trois commandes ont des fonctions différentes :

Commande Action
systemctl daemon-reload Demande à systemd de relire les fichiers unit et leurs surcharges
systemctl reload service Demande au service lui-même de relire sa configuration, sans l’arrêter lorsque celui-ci prend en charge cette opération
systemctl restart service Arrête puis redémarre complètement le service

Ainsi, après avoir modifié :

/etc/systemd/system/mon-service.service

ou créé une surcharge avec :

1
sudo systemctl edit mon-service

utilisez :

1
2
sudo systemctl daemon-reload
sudo systemctl restart mon-service

En revanche, si vous avez uniquement modifié le fichier de configuration de l’application, par exemple nginx.conf, un daemon-reload n’est généralement pas nécessaire. Après avoir vérifié la syntaxe, vous pouvez simplement recharger Nginx :

1
2
sudo nginx -t
sudo systemctl reload nginx

Retenez donc que daemon-reload concerne la configuration de systemd, tandis que reload concerne la configuration du service ou de l’application.

Tableau des commandes systemctl pour dépanner un service

Le tableau suivant récapitule les principales commandes systemctl à connaître pour vérifier, diagnostiquer et réparer un service géré par systemd.

Commande Description
systemctl list-units --type=service Lister les services actuellement chargés
systemctl list-unit-files --type=service Lister tous les fichiers de services installés et leur état d’activation
systemctl --failed Afficher les unités actuellement en échec
systemctl status service Afficher l’état détaillé d’un service et ses derniers messages
systemctl is-active service Vérifier rapidement si un service est actif
systemctl is-enabled service Vérifier si un service est activé au démarrage
systemctl start service Démarrer un service
systemctl stop service Arrêter un service
systemctl restart service Arrêter puis redémarrer un service
systemctl reload service Recharger la configuration d’un service sans l’arrêter, lorsque cette fonction est prise en charge
systemctl enable service Activer le démarrage automatique d’un service
systemctl enable --now service Activer un service au démarrage et le démarrer immédiatement
systemctl disable service Désactiver le démarrage automatique d’un service
systemctl disable --now service Désactiver le service au démarrage et l’arrêter immédiatement
systemctl mask service Bloquer complètement le démarrage d’un service
systemctl unmask service Lever le blocage appliqué avec mask
systemctl reset-failed service Effacer l’état failed et les compteurs d’échec d’un service
systemctl list-dependencies service Afficher les dépendances d’un service
systemctl list-dependencies --reverse service Afficher les unités qui dépendent du service
systemctl cat service Afficher le fichier unit et les éventuels fichiers de surcharge (drop-ins)
systemctl show service Afficher toutes les propriétés systemd d’un service
systemctl edit service Créer ou modifier proprement une surcharge du fichier unit
systemctl daemon-reload Demander à systemd de relire les fichiers unit après une modification

Pour un diagnostic rapide d’un service qui ne démarre plus, commencez généralement par ces trois commandes :

1
2
3
systemctl status nom-du-service
sudo journalctl -u nom-du-service -e
systemctl list-dependencies nom-du-service

Si le service a échoué plusieurs fois et que systemd refuse désormais de le relancer avec un message comme Start request repeated too quickly, corrigez d’abord l’erreur puis utilisez :

1
2
sudo systemctl reset-failed nom-du-service
sudo systemctl start nom-du-service

Enfin, n’oubliez pas que systemctl et journalctl sont complémentaires : systemctl permet surtout de connaître et modifier l’état du service, tandis que journalctl permet d’analyser ses journaux afin de déterminer pourquoi il a échoué.