Commande journalctl : utilisation, journaux par service et nettoyage de la taille du journal

Environnement de testFamille RHELAlmaLinux 9.8systemd 252Compte rootDebian 12 compte standardVérifié le 2026-11-05
Commandes d'informations système et de réglagesjournalctlEmplacement/usr/bin/journalctl

La commande journalctl est l'outil qui permet de choisir et de lire, dans le journal systemd, les journaux laissés par les services et le noyau. Sous Linux avec systemd, systemd-journald rassemble ces journaux dans le journal. En lisant les journaux par service, par période et par priorité sur un serveur AlmaLinux 9 et un serveur Debian 12, un compte ordinaire ne voyait que ses propres journaux, et un serveur qui garde son journal en mémoire ne pouvait pas choisir un démarrage précédent.

Les sorties ci-dessous proviennent des deux serveurs. Les noms d'hôte, les comptes, les ID de démarrage, les numéros de processus du serveur AlmaLinux et la version du paquet systemd ont été remplacés par des valeurs d'exemple, et les deux serveurs affichaient l'heure en UTC.

1️⃣ Utiliser la commande journalctl et lire les journaux récents

Lancée sans option, journalctl ouvre le journal dans less à partir de sa ligne la plus ancienne ; pour voir les journaux récents, fixez donc le nombre de lignes avec -n. Si vous omettez le nombre après -n, 10 lignes s'affichent.

journalctl -n 3
Oct 28 07:14:06 server1 systemd[1]: session-3017.scope: Deactivated successfully.
Oct 28 07:14:06 server1 systemd[1]: session-3017.scope: Consumed 3.934s CPU time.
Oct 28 07:14:07 server1 sudo[851987]: pam_unix(sudo:session): session closed for user user

Chaque ligne se compose de l'heure, du nom d'hôte, du programme qui a écrit le journal avec son numéro de processus, puis du message. Avec -r, l'ordre s'inverse et la ligne la plus récente remonte en haut. Dans le journal de crond du serveur AlmaLinux, la ligne CMDEND écrite en dernier était en haut.

journalctl -r -u crond -n 3
Oct 28 07:01:01 server1 CROND[841384]: (root) CMDEND (run-parts /etc/cron.hourly)
Oct 28 07:01:01 server1 run-parts[841394]: (/etc/cron.hourly) starting 0anacron
Oct 28 07:01:01 server1 CROND[841388]: (root) CMD (run-parts /etc/cron.hourly)

-f ne s'arrête pas après la dernière ligne et continue d'afficher les nouvelles lignes au fur et à mesure. Sur le serveur Debian 12, la dernière ligne de logger est restée affichée avec -q et -t myapp, puis deux lignes de plus ont été écrites avec logger. Les deux lignes sont apparues juste en dessous.

journalctl -q -f -n 1 -t myapp
Oct 28 07:12:46 server2 myapp[347704]: journalctl error test
Oct 28 07:14:35 server2 myapp[347881]: follow line 1
Oct 28 07:14:36 server2 myapp[347877]: follow line 2

-f ne s'arrête pas tant que vous n'appuyez pas sur Ctrl+C ; utilisez-le donc pour surveiller le journal pendant le redémarrage d'un service.

Dans less, les lignes plus larges que l'écran sont coupées à droite, et la partie coupée se lit avec les flèches. Une sortie envoyée vers un tube ou un fichier ne passe pas par less. Pour afficher directement dans le terminal sans less, ajoutez --no-pager.

2️⃣ Journaux journalctl par service

Les lignes récentes mélangent les journaux de nombreux services ; pour voir le journal d'un seul service, indiquez donc le nom de l'unité avec -u. Le .service à la fin du nom de l'unité peut être omis.

journalctl -u crond -n 4
Oct 28 06:01:01 server1 CROND[802926]: (root) CMDEND (run-parts /etc/cron.hourly)
Oct 28 07:01:01 server1 CROND[841388]: (root) CMD (run-parts /etc/cron.hourly)
Oct 28 07:01:01 server1 run-parts[841394]: (/etc/cron.hourly) starting 0anacron
Oct 28 07:01:01 server1 CROND[841384]: (root) CMDEND (run-parts /etc/cron.hourly)

Avec -u écrit deux fois, les journaux des deux services sortent mêlés dans l'ordre chronologique. En sélectionnant ensemble crond et nginx du 18 octobre de 08:00 à 08:15 sur le serveur AlmaLinux, quatre lignes de crond à 08:01 ont été suivies de deux lignes nginx reload à 08:12.

journalctl -u nginx -u crond --since '2026-10-18 08:00' --until '2026-10-18 08:15'
Oct 18 08:01:01 server1 CROND[381522]: (root) CMD (run-parts /etc/cron.hourly)
Oct 18 08:01:01 server1 run-parts[381528]: (/etc/cron.hourly) starting 0anacron
Oct 18 08:01:01 server1 run-parts[381534]: (/etc/cron.hourly) finished 0anacron
Oct 18 08:01:01 server1 CROND[381518]: (root) CMDEND (run-parts /etc/cron.hourly)
Oct 18 08:12:30 server1 systemd[1]: Reloading nginx - high performance web server...
Oct 18 08:12:30 server1 systemd[1]: Reloaded nginx - high performance web server.

systemctl status n'affiche que les 10 dernières lignes de journal sous l'état du service ; les journaux plus anciens se consultent donc avec journalctl -u. Juste après avoir lancé systemctl restart sur un service, exécutez journalctl -u pour vérifier le journal de démarrage.

Les journaux que des scripts ou des tâches cron ont écrits avec logger se retrouvent par leur étiquette (identifiant), et non par une unité. Après -t, écrivez le même nom que celui donné à -t de logger.

logger -t myapp 'journalctl test message'

Sur le serveur Debian 12, logger n'a rien affiché à l'écran, et les lignes écrites ont été retrouvées avec -t myapp.

journalctl -q -t myapp
Oct 28 07:12:44 server2 myapp[347693]: journalctl test message

-g ne garde que les lignes dont le message contient un texte donné. Si vous écrivez le texte entièrement en minuscules, la casse est ignorée.

journalctl -u crond -g anacron -n 2
Oct 28 07:01:01 server1 run-parts[841394]: (/etc/cron.hourly) starting 0anacron

-n compte les lignes avant le filtrage par -g ; des deux dernières lignes de crond, seule celle contenant anacron est donc restée.

3️⃣ Journaux par période et par démarrage

--since et --until fixent le début et la fin de la période affichée. S'il y a un espace entre la date et l'heure, entourez la valeur de guillemets simples.

Valeur de --sinceSens et quand l'utiliser
'2026-10-28 06:00'À partir de 06:00:00 ce jour-là (00 seconde si non précisé), quand vous savez à quelle heure le problème a commencé
todayÀ partir de 00:00:00 aujourd'hui, pour ne voir que les journaux du jour
yesterdayÀ partir d'hier 00:00:00 jusqu'à maintenant ; pour hier seulement, ajoutez --until today
'-2h'Depuis 2 heures, pour voir ce qui vient de se passer (mesuré ci-dessous)
'1 hour ago'Depuis 1 heure, comme -1h

Sur le serveur AlmaLinux, les 2 dernières heures commençaient par les lignes de crond écrites à 06:01 ; voici les quatre premières.

journalctl -u crond --since '-2h' | head -4
Oct 28 06:01:01 server1 CROND[802930]: (root) CMD (run-parts /etc/cron.hourly)
Oct 28 06:01:01 server1 run-parts[802936]: (/etc/cron.hourly) starting 0anacron
Oct 28 06:01:01 server1 CROND[802926]: (root) CMDEND (run-parts /etc/cron.hourly)
Oct 28 07:01:01 server1 CROND[841388]: (root) CMD (run-parts /etc/cron.hourly)

-b ne garde que les journaux depuis le démarrage actuel. Pour chercher pourquoi un serveur a redémarré, vérifiez d'abord dans la liste des démarrages s'il reste des journaux du démarrage précédent.

journalctl -b -u crond -n 2
Oct 28 07:01:01 server1 run-parts[841394]: (/etc/cron.hourly) starting 0anacron
Oct 28 07:01:01 server1 CROND[841384]: (root) CMDEND (run-parts /etc/cron.hourly)

--list-boots affiche, pour chaque démarrage conservé dans le journal, son numéro, son ID de démarrage et l'heure de sa première et de sa dernière ligne.

journalctl --list-boots
IDX BOOT ID                          FIRST ENTRY                 LAST ENTRY
  0 4f1c2a9be0d34c7a8e6b5d20c1f3a7e9 Sat 2026-10-17 08:29:26 UTC Wed 2026-10-28 07:16:10 UTC

Le serveur AlmaLinux ne garde pas son journal sur disque et n'avait donc qu'un seul enregistrement de démarrage. C'est pourquoi -b -1 pour le démarrage précédent s'est terminé sur un simple avis.

journalctl -b -1
Specifying boot ID or boot offset has no effect, no persistent journal was found.

Les journaux d'un démarrage précédent ne se lisent avec -b -1 que sur les serveurs qui enregistrent le journal sur disque (/var/log/journal).

4️⃣ Journaux d'erreurs et journaux du noyau avec journalctl

-p sélectionne les lignes selon la priorité du journal. Si vous indiquez un niveau, ce niveau et tous les niveaux plus importants s'affichent, et le niveau peut s'écrire par son nom ou par son numéro.

NiveauNumériqueSignification
emerg0Le système est inutilisable
alert1Une action immédiate est nécessaire
crit2Erreur critique
err3Erreur
warning4Avertissement
notice5Normal mais à surveiller ; niveau des lignes écrites par logger sans -p
info6Informations
debug7Message de débogage

Après avoir écrit une ligne de niveau err avec logger et sélectionné avec -p err, la ligne de niveau notice de même étiquette (journalctl test message) a disparu et seule la ligne err est restée.

logger -t myapp -p user.err 'journalctl error test'; journalctl -q -t myapp -p err
Oct 28 07:12:46 server2 myapp[347704]: journalctl error test

Relier deux niveaux par deux points n'affiche que cette plage. Avec warning..err, seuls les niveaux avertissement et erreur restent.

journalctl -q -t myapp -p warning..err
Oct 28 07:12:46 server2 myapp[347704]: journalctl error test

-k ne garde que les messages du noyau et n'affiche que les lignes depuis le démarrage actuel.

journalctl -k -n 3
Oct 26 10:14:25 server1 systemd-rc-local-generator[96245]: /etc/rc.d/rc.local is not marked executable, skipping.
Oct 27 10:47:57 server1 systemd-rc-local-generator[512078]: /etc/rc.d/rc.local is not marked executable, skipping.
Oct 27 11:01:10 server1 systemd-rc-local-generator[520023]: /etc/rc.d/rc.local is not marked executable, skipping.

Les trois dernières lignes de -k sur le serveur AlmaLinux étaient toutes des lignes de systemd-rc-local-generator. Ce sont des messages écrits dans le tampon du journal du noyau ; ils sont donc enregistrés avec _TRANSPORT égal à kernel et apparaissent aussi avec -k.

5️⃣ Formats de sortie de journalctl

-o change le format de chaque ligne. La valeur par défaut short est presque identique à un fichier syslog, et short-iso met l'heure au format ISO 8601 avec le fuseau horaire. En passant à short-iso sur le serveur AlmaLinux, +0000 s'est ajouté à la fin de l'heure.

journalctl -u crond -n 2 -o short-iso
2026-10-28T07:01:01+0000 server1 run-parts[841394]: (/etc/cron.hourly) starting 0anacron
2026-10-28T07:01:01+0000 server1 CROND[841384]: (root) CMDEND (run-parts /etc/cron.hourly)

cat retire l'heure et le nom d'hôte et n'affiche que le message ; utilisez-le pour passer les messages à grep ou à un autre programme.

journalctl -u crond -n 2 -o cat
(/etc/cron.hourly) starting 0anacron
(root) CMDEND (run-parts /etc/cron.hourly)

json et json-pretty affichent les champs enregistrés dans le journal sous forme de noms et de valeurs. Quand vous choisissez des champs avec --output-fields, les champs du curseur, de l'heure et de l'ID de démarrage suivent toujours. Même avec seulement quatre champs choisis sur le serveur Debian 12, __CURSOR, _BOOT_ID et deux champs d'heure sont apparus aussi.

journalctl -q -t myapp -n 1 -o json-pretty --output-fields=MESSAGE,PRIORITY,SYSLOG_IDENTIFIER,_PID
{
	"__REALTIME_TIMESTAMP" : "1793171676664200",
	"_PID" : "347877",
	"SYSLOG_IDENTIFIER" : "myapp",
	"MESSAGE" : "follow line 2",
	"__CURSOR" : "s=2a6f0c1d9e8b47a3b5c4d3e2f1a0b9c8;i=1a2b3;b=b7e3d1a04c9f4e2a8d6c5b1f0e2a9c47;m=17cf8fe36f5;t=65ee150cf1188;x=1f2e3d4c5b6a7980",
	"_BOOT_ID" : "b7e3d1a04c9f4e2a8d6c5b1f0e2a9c47",
	"PRIORITY" : "5",
	"__MONOTONIC_TIMESTAMP" : "1636264982261"
}

6️⃣ Emplacement du journal et nettoyage de sa taille

C'est la valeur Storage= de journald.conf qui décide si le journal est en mémoire ou sur disque. La valeur par défaut auto l'enregistre sur disque si le dossier /var/log/journal existe, et en mémoire (/run/log/journal) sinon.

🖥️ Qui écrit les journauxServices, noyau, logger
systemd-journaldEnregistre les journaux reçus dans les fichiers du journal
/run/log/journalStorage=auto (pas de dossier), mémoire, vidé au redémarrage
/var/log/journalStorage=persistent ou auto (dossier présent), disque, conservé après redémarrage
🖥️ journalctlLit et affiche les fichiers du journal des deux dossiers

Le serveur AlmaLinux n'avait pas de dossier /var/log/journal, son journal se trouvait donc uniquement dans /run/log/journal.

ls -ld /var/log/journal /run/log/journal
ls: cannot access '/var/log/journal': No such file or directory
drwxr-sr-x+ 4 root systemd-journal 80 Oct 17 08:30 /run/log/journal

Le serveur Debian 12 avait les deux dossiers, et son journal s'accumulait sur disque.

ls -ld /var/log/journal /run/log/journal
drwxr-sr-x+ 2 root systemd-journal   40 Oct  9 08:43 /run/log/journal
drwxr-sr-x+ 4 root systemd-journal 4096 Sep 24 12:52 /var/log/journal

Pour conserver les journaux après un redémarrage, passez Storage= à persistent dans journald.conf et redémarrez systemd-journald. D'après le manuel officiel, le dossier /var/log/journal est créé automatiquement si besoin. Les réglages n'ont pas été modifiés pour cet article.

Un journal conservé sur disque est comme la boîte noire d'un avion, qu'on récupère et qu'on lit après un incident.

--disk-usage affiche la taille totale des fichiers du journal archivés et de ceux en cours d'utilisation. Sur un compte ordinaire du serveur Debian 12, avec l'avis [Hint] du haut masqué par -q, le résultat tenait en une ligne : 6.6M.

journalctl -q --disk-usage
Archived and active journals take up 6.6M in the file system.

La taille maximale du journal enregistré sur disque se règle avec SystemMaxUse=. Sans valeur, la limite est de 10 % de la taille du système de fichiers (4G au plus), et le journald.conf du serveur Debian 12 indiquait 50M.

grep -v '^#' /etc/systemd/journald.conf | grep -v '^$'
[Journal]
SystemMaxUse=50M

Pour réduire tout de suite les anciens journaux, fixez la taille à garder avec --vacuum-size ou la durée à garder avec --vacuum-time. Les deux commandes suppriment des fichiers du journal ; elles n'ont donc pas été lancées pour cet article.

journalctl --vacuum-size=200M

--vacuum-size=200M supprime les fichiers du journal archivés, en commençant par les plus anciens, jusqu'à ce que la taille totale passe sous 200M.

journalctl --vacuum-time=2weeks

--vacuum-time=2weeks supprime les fichiers d'archive qui ne contiennent que des lignes de plus de 2 semaines.

vacuum ne supprime que les fichiers archivés et laisse ceux en cours d'utilisation ; même après l'avoir lancé, le chiffre de --disk-usage peut donc ne pas descendre jusqu'à la taille indiquée.

Les journaux texte de /var/log sont écrits par rsyslog, qui fonctionne indépendamment de journald. C'est pourquoi les deux journaux se lisent et se gèrent différemment.

Catégoriejournald(journalctl)rsyslog
Lecturejournalctlcat, less, grep
Emplacement/run/log/journal ou /var/log/journal/var/log/messages (famille RHEL) ou /var/log/syslog (famille Debian)
Gestion de la tailleSystemMaxUse et autres dans journald.conflogrotate

7️⃣ Droits de lecture et options de la commande journalctl

  • ↪️ Quand un compte ordinaire ne voit pas les journaux

🔲 Droits de lecture

En lançant journalctl avec un compte autre que root, un texte [Hint] apparaît en haut et seuls les journaux écrits par ce compte sont visibles. En cherchant les journaux de nginx avec un compte ordinaire sur le serveur Debian 12, seul [-- No entries --] est apparu après l'avis.

journalctl -u nginx -n 5
Hint: You are currently not seeing messages from other users and the system.
      Users in groups 'adm', 'systemd-journal' can see all messages.
      Pass -q to turn off this notice.
-- No entries --

D'après id -nG, ce compte n'appartenait qu'à un seul groupe et ne faisait partie ni du groupe adm ni du groupe systemd-journal cités par l'avis.

id -nG
user

Le manuel officiel explique que les comptes des groupes systemd-journal, adm et wheel peuvent lire tout le journal. adm et wheel apportent d'autres droits fixés par la distribution, et wheel permet souvent aussi des tâches d'administration ; pour un compte qui ne fait que lire les journaux, le groupe systemd-journal est donc le bon choix.

usermod -aG systemd-journal user

La commande usermod qui ajoute le groupe n'a pas été lancée pour cet article. Après avoir ajouté le groupe, reconnectez-vous et vérifiez les groupes avec id -nG. Un compte doté des droits d'administrateur voit aussi tous les journaux avec sudo journalctl.

Le texte [Hint] se masque avec -q. Même avec -q, cependant, les journaux visibles restent les seules lignes écrites par ce compte. --user lit le journal utilisateur de ce compte et ne fonctionne que sur les serveurs qui enregistrent le journal sur disque. Sur le serveur Debian 12, qui garde son journal sur disque, les lignes systemd et logger de ce compte sont apparues.

journalctl --user -n 3
Oct 28 07:12:35 server2 systemd[347665]: Reached target default.target - Main User Target.
Oct 28 07:12:35 server2 systemd[347665]: Startup finished in 181ms.
Oct 28 07:12:44 server2 myapp[347693]: journalctl test message

🔲 Options de la commande journalctl

📌 Options principales : résultats de cet article

OptionRôleRésultat dans cet article
-n lignesN'afficher que les dernières lignes ; 10 lignes sans nombre-n 3 affiche les trois dernières lignes
-rInverser l'ordre, ligne la plus récente en hautDans le journal de crond, la ligne CMDEND écrite en dernier est en haut
-fContinuer d'afficher les nouvelles lignes après la dernièreLes deux lignes écrites avec logger suivent juste en dessous
-qMasquer les avis comme [Hint]Le résultat de --disk-usage d'un compte ordinaire Debian 12 tient en une ligne : 6.6M
-u unitéN'afficher que le journal de ce serviceAvec -u écrit deux fois, quatre lignes de crond sont suivies de deux lignes nginx reload dans l'ordre chronologique
-t étiquetteN'afficher que les journaux portant l'étiquette donnée à logger -t-t myapp affiche les lignes écrites avec logger
-g texteN'afficher que les lignes dont le message contient ce texteDes deux dernières lignes de crond, seule celle contenant anacron reste
--since, --untilDébut et fin de la période affichée--since '-2h' commence aux lignes de crond écrites à 06:01
-bSeulement les journaux depuis le démarrage actuel ; -b -1 est le démarrage précédentSur le serveur AlmaLinux, sans journal sur disque, -b -1 n'affiche que l'avis [no persistent journal was found]
--list-bootsListe des démarrages conservés dans le journalLe serveur AlmaLinux n'a qu'un seul enregistrement de démarrage
-p niveauN'afficher que cette priorité et les niveaux plus importants-p err retire la ligne notice et ne garde que la ligne err ; warning..err donne la même ligne
-kN'afficher que les messages du noyau du démarrage actuelLes trois dernières lignes sont toutes des lignes de systemd-rc-local-generator
-o formatChanger le format de sortie de chaque ligneshort-iso ajoute +0000 à la fin de l'heure ; cat ne garde que le message
--output-fields champsChoisir les champs dans la sortie jsonMême avec quatre champs choisis, __CURSOR, _BOOT_ID et deux champs d'heure suivent
--disk-usageAfficher la taille totale occupée par les fichiers du journal6.6M sur un compte ordinaire du serveur Debian 12
--userLire le journal utilisateur de ce compteSur le serveur Debian 12, les lignes systemd et logger de ce compte apparaissent
--utcAfficher l'heure en UTCMême sur le serveur AlmaLinux avec son propre fuseau horaire, les heures du journal de crond passent en UTC
champ=valeurN'afficher que les lignes ayant cette valeur de champ_PID=347704 n'affiche que la ligne err écrite par logger

📎 Autres options : selon le manuel officiel

OptionRôle
--no-pagerAfficher directement dans le terminal sans passer par less
-e, --pager-endOuvrir less à la fin du journal ; 1000 lignes sans -n
-x, --catalogAjouter aux lignes de journal le texte explicatif du catalogue de messages
-a, --allAfficher les champs en entier, même avec des caractères non imprimables ou des valeurs très longues
-N, --fieldsAfficher tous les noms de champs utilisés dans le journal
-F, --field= champAfficher toutes les valeurs de ce champ
-D dossierLire le journal du dossier indiqué au lieu de l'emplacement par défaut
--file= fichierLire le fichier de journal indiqué ; peut être répété
--vacuum-size= tailleSupprimer les fichiers du journal archivés, les plus anciens d'abord, jusqu'à passer sous la taille indiquée
--vacuum-time= duréeSupprimer les fichiers d'archive qui ne contiennent que des lignes plus anciennes que la durée indiquée
--vacuum-files= nombreSupprimer les fichiers du journal archivés en n'en gardant que le nombre indiqué
--rotateArchiver les fichiers du journal en cours et en commencer de nouveaux
--flushDéplacer le journal de la mémoire (/run/log/journal) vers le disque (/var/log/journal), en stockage persistent

🔲 Simulateur de la commande journalctl

Dans le simulateur ci-dessous, vous pouvez saisir vous-même les commandes pour vérifier les journaux récents, les journaux par service, les périodes, les priorités et les formats de sortie.

Simulateur de la commande journalctlsystemd 252
[root@server work]#
Il fonctionne uniquement dans votre navigateur ; les lignes écrites avec logger disparaissent au rechargement, et ↑↓ rappellent les commandes déjà saisies.

🔢 FAQ & contenus recommandés

Avec --utc, l'heure s'affiche en UTC quel que soit le fuseau horaire réglé sur le serveur. Même sur le serveur AlmaLinux avec son propre fuseau horaire, le journal de crond avec --utc affichait l'heure en UTC.

En écrivant un nom de champ et sa valeur reliés par un signe égal, comme dans journalctl _PID=347704, seules les lignes ayant cette valeur restent. La recherche avec le numéro de processus de la ligne err écrite par logger n'a renvoyé que cette ligne, et en l'écrivant avec -u, seules les lignes qui remplissent les deux conditions s'affichent.

🧭 Commandes d'infos · réglages système : contenus recommandés 8 articles · 2 références
🗂️ Commandes d'infos · réglages système
📄 Infos CPU · RAM · disque · OS 📄 uname · version du noyau 📄 Commande free 📄 Commande uptime
📄 Commande timedatectl 📄 Commande localectl
📄 logrotate 📄 Commande journalctl

ℹ️ Mention d'affiliation
Le contenu de ce site contient des liens d'affiliation. Lorsqu'un visiteur achète un produit ou un service via l'un de ces liens, le site perçoit une commission du vendeur. Le montant payé par l'acheteur(il baisse lors des promotions ↓), lui, n'augmente pas. Les prix, remises et stocks indiqués correspondent à la date de rédaction et peuvent différer ; vérifiez-les donc auprès du vendeur avant d'acheter. Les produits sont choisis et évalués selon nos propres critères, et les commissions n'influencent ni l'ordre de présentation ni le contenu des évaluations.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Prouvez que vous êtes humain : 3   +   6   =