Commande journalctl : utilisation, journaux par service et nettoyage de la taille du journal
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 3Oct 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 userChaque 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 3Oct 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 myappOct 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 4Oct 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 myappOct 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 2Oct 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 --since | Sens 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 -4Oct 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 2Oct 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-bootsIDX BOOT ID FIRST ENTRY LAST ENTRY
0 4f1c2a9be0d34c7a8e6b5d20c1f3a7e9 Sat 2026-10-17 08:29:26 UTC Wed 2026-10-28 07:16:10 UTCLe 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 -1Specifying 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.
| Niveau | Numérique | Signification |
|---|---|---|
| emerg | 0 | Le système est inutilisable |
| alert | 1 | Une action immédiate est nécessaire |
| crit | 2 | Erreur critique |
| err | 3 | Erreur |
| warning | 4 | Avertissement |
| notice | 5 | Normal mais à surveiller ; niveau des lignes écrites par logger sans -p |
| info | 6 | Informations |
| debug | 7 | Message 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 errOct 28 07:12:46 server2 myapp[347704]: journalctl error testRelier 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..errOct 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 3Oct 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-iso2026-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.
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/journalls: cannot access '/var/log/journal': No such file or directory
drwxr-sr-x+ 4 root systemd-journal 80 Oct 17 08:30 /run/log/journalLe serveur Debian 12 avait les deux dossiers, et son journal s'accumulait sur disque.
ls -ld /var/log/journal /run/log/journaldrwxr-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/journalPour 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-usageArchived 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=50MPour 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égorie | journald(journalctl) | rsyslog |
|---|---|---|
| Lecture | journalctl | cat, less, grep |
| Emplacement | /run/log/journal ou /var/log/journal | /var/log/messages (famille RHEL) ou /var/log/syslog (famille Debian) |
| Gestion de la taille | SystemMaxUse et autres dans journald.conf | logrotate |
7️⃣ Droits de lecture et options de la commande journalctl
🔲 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 5Hint: 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 -nGuserLe 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 userLa 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 3Oct 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
| Option | Rôle | Résultat dans cet article | |
|---|---|---|---|
| -n lignes | N'afficher que les dernières lignes ; 10 lignes sans nombre | -n 3 affiche les trois dernières lignes | |
| -r | Inverser l'ordre, ligne la plus récente en haut | Dans le journal de crond, la ligne CMDEND écrite en dernier est en haut | |
| -f | Continuer d'afficher les nouvelles lignes après la dernière | Les deux lignes écrites avec logger suivent juste en dessous | |
| -q | Masquer 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 service | Avec -u écrit deux fois, quatre lignes de crond sont suivies de deux lignes nginx reload dans l'ordre chronologique | |
| -t étiquette | N'afficher que les journaux portant l'étiquette donnée à logger -t | -t myapp affiche les lignes écrites avec logger | |
| -g texte | N'afficher que les lignes dont le message contient ce texte | Des deux dernières lignes de crond, seule celle contenant anacron reste | |
| --since, --until | Début et fin de la période affichée | --since '-2h' commence aux lignes de crond écrites à 06:01 | |
| -b | Seulement les journaux depuis le démarrage actuel ; -b -1 est le démarrage précédent | Sur le serveur AlmaLinux, sans journal sur disque, -b -1 n'affiche que l'avis [no persistent journal was found] | |
| --list-boots | Liste des démarrages conservés dans le journal | Le serveur AlmaLinux n'a qu'un seul enregistrement de démarrage | |
| -p niveau | N'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 | |
| -k | N'afficher que les messages du noyau du démarrage actuel | Les trois dernières lignes sont toutes des lignes de systemd-rc-local-generator | |
| -o format | Changer le format de sortie de chaque ligne | short-iso ajoute +0000 à la fin de l'heure ; cat ne garde que le message | |
| --output-fields champs | Choisir les champs dans la sortie json | Même avec quatre champs choisis, __CURSOR, _BOOT_ID et deux champs d'heure suivent | |
| --disk-usage | Afficher la taille totale occupée par les fichiers du journal | 6.6M sur un compte ordinaire du serveur Debian 12 | |
| --user | Lire le journal utilisateur de ce compte | Sur le serveur Debian 12, les lignes systemd et logger de ce compte apparaissent | |
| --utc | Afficher l'heure en UTC | Même sur le serveur AlmaLinux avec son propre fuseau horaire, les heures du journal de crond passent en UTC | |
| champ=valeur | N'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
| Option | Rôle | |
|---|---|---|
| --no-pager | Afficher directement dans le terminal sans passer par less | |
| -e, --pager-end | Ouvrir less à la fin du journal ; 1000 lignes sans -n | |
| -x, --catalog | Ajouter aux lignes de journal le texte explicatif du catalogue de messages | |
| -a, --all | Afficher les champs en entier, même avec des caractères non imprimables ou des valeurs très longues | |
| -N, --fields | Afficher tous les noms de champs utilisés dans le journal | |
| -F, --field= champ | Afficher toutes les valeurs de ce champ | |
| -D dossier | Lire le journal du dossier indiqué au lieu de l'emplacement par défaut | |
| --file= fichier | Lire le fichier de journal indiqué ; peut être répété | |
| --vacuum-size= taille | Supprimer les fichiers du journal archivés, les plus anciens d'abord, jusqu'à passer sous la taille indiquée | |
| --vacuum-time= durée | Supprimer les fichiers d'archive qui ne contiennent que des lignes plus anciennes que la durée indiquée | |
| --vacuum-files= nombre | Supprimer les fichiers du journal archivés en n'en gardant que le nombre indiqué | |
| --rotate | Archiver les fichiers du journal en cours et en commencer de nouveaux | |
| --flush | Dé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.
🔢 FAQ & contenus recommandés








ℹ️ 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.