Comment effacer journalctl

209

Je ne pouvais trouver dans Google aucun moyen sûr d'effacer le journal systemd. Est-ce que quelqu'un connaît un moyen sûr et fiable de le faire?

Disons que j'essayais quelque chose et que mes journaux étaient encombrés de divers messages d'erreur. De plus, j'affiche mon journal sur mon bureau en utilisant Conky. Je ne veux vraiment pas voir ces erreurs car elles me rappellent un jour terrible où je réparais ce genre de choses. Je veux me sentir comme un homme frais après cette horreur. Je pense que tout le monde conviendra que c’est une raison valable pour effacer les journaux: P.

Łukasz Zaroda
la source

Réponses:

292

La méthode d’auto-maintenance consiste à aspirer les bûches par taille ou par heure.

Ne conserver que les deux derniers jours:

journalctl --vacuum-time=2d

Ne conserver que les 500 derniers MB:

journalctl --vacuum-size=500M

man journalctl pour plus d'informations.

Michael
la source
11
Belle commande, mais n'a pas fonctionné pour moi sur openSUSE 13.2 (la version stable actuelle). Comme on le sait, Arch est généralement à la pointe des programmes pour les noyaux et les programmes d’utilisateur, alors j’ai supposé que des options de vide auraient peut-être été ajoutées récemment à systemd et n’auraient tout simplement pas été intégrées à ma distribution. Confirmé le fait ici dans l'annonce de Lennart du 10 décembre 2014 techupdates.com/go/1002774 que cette commande avait été ajoutée dans systemd v218. Le simple fait d'ajouter ce commentaire au cas où quelqu'un d'autre comme moi qui n'est pas sur Arch a un problème similaire. Upvote quand même.
Joshua Huber
Je viens d'utiliser "journalctl --vacuum-time = 1d" pour corriger une situation dans laquelle les nouveaux messages de journal ne s'affichent pas avec "journalctl -f". Apparemment, mon heure système avait temporairement fait un bond de quelques jours, puis avait été récupérée, et journalctl utilisait les horodatages des événements de journal de cette heure future comme fin de journal.
user5071535
8
Ne fonctionnait pas dans la version "systemd 229" sous Ubuntu 16.04. journalctl --vacuum-size=1Kpuis journalctlmontre encore beaucoup plus que 1K. Il montre tous les messages depuis le dernier démarrage.
Dan Dascalescu
18
Il semble que cela efface uniquement les journaux archivés, pas les actifs. J'ai essayé de courir journalctl --flush --rotateavant journalctl --vacuum-time=1set il a enlevé plus de choses, bien que toujours pas tout.
user60039
2
La documentation ne me semble pas si claire. Reste-t-il toujours réglé sur 2d (dans votre exemple)? Ou est 2d à partir du moment où vous exécutez la commande? Peut-être que je ne comprends pas comment cela fonctionne exactement.
jersey bean
85

En général, vous ne nettoyez pas le journal vous-même. Cela est géré par systemd lui-même et les anciens journaux sont remplacés par une rotation au fur et à mesure que de nouvelles données arrivent. La bonne chose à faire serait de planifier journald pour ne conserver que le nombre de données qui vous intéresse. La chose la plus courante à ajuster est le disque total. l'espace qu'il est autorisé à prendre. Une fois cette limite franchie, il lancera les anciennes entrées pour rester proche de cette valeur.

Vous pouvez définir ceci /etc/systemd/journald.confcomme suit:

SystemMaxUse=100M
Caleb
la source
11
Ok, mais il y a aussi des situations atypiques. Je sais que la plupart d'entre eux ne sont que des raisons esthétiques, mais l'esthétique est une raison valable pour l'être humain;).
Łukasz Zaroda
2
@ ŁukaszZaroda Dans ce cas, vous devrez définir "sûr". Normalement, "je veux supprimer quelque chose qu'un démon est configuré pour conserver" est incompatible avec "sûr". Si vous souhaitez le forcer, arrêtez simplement le service et mettez à zéro les fichiers journaux. Si vous voulez que cela fonctionne normalement, vous devez mieux définir les paramètres de votre question. Qu'entendez-vous par "en sécurité"?
Caleb
Par coffre-fort, je veux dire qu'après le nettoyage, cela fonctionnera comme d'habitude, en partant du nouvel endroit.
Łukasz Zaroda
5
Ce n'est peut-être pas une situation typique, mais il est parfois nécessaire de supprimer d'anciens journaux en raison de certains bogues de systemd, par exemple bbs.archlinux.org/viewtopic.php?pid=1173031#p1173031
Diffycat le
1
Pour nettoyer les journaux après une certaine période plutôt que lorsqu'ils atteignent une certaine taille, vous pouvez définir le paramètre à la MaxRetentionSecplace de SystemMaxUse. Voir man journald.confpour plus de détails.
joelostblom
52

La réponse de Michael manque à une chose: passer l'aspirateur ne supprime que les fichiers journaux archivés, pas les fichiers actifs. Pour vous débarrasser de tout, vous devez d'abord faire pivoter les fichiers afin que les entrées récentes soient déplacées vers des fichiers inactifs.

Ainsi, la réponse complète pour supprimer toutes les entrées semble être

journalctl --rotate
journalctl --vacuum-time=1s

(Notez que vous ne pouvez pas combiner cela en une seule journalctlcommande.)

En passant, certaines distributions ont journald configuré pour enregistrer les journaux sur disk ( /var/log/journal), tandis que d'autres les conservent en mémoire ( /run/log/journal). Je suppose que dans certains cas, il peut être nécessaire d’utiliser d’ journalctl --flushabord pour tout supprimer.

Si vous n'avez pas --rotatedans votre version, vous pouvez utiliser l' --sinceargument pour filtrer les entrées:

--since "2019-01-30 14:00:00"
--since today
Jan Warchoł
la source
journalctl: option non reconnue '--rotate'
stiv
1
Pendant que j'obtiens ce que les autres réponses approchent (stratégie à long terme) - la question est simple: comment effacez-vous les journaux maintenant (peut-être que vous n'êtes pas intéressé à long terme pour votre tâche actuelle). Cela répond à cette question sans faire d’autres hypothèses et ajoute une grande valeur à la compréhension de journalctl. Cela devrait être la réponse.
Marc
1
C'était la seule réponse utile pour moi. Merci!
Freedo
18

Sur Arch Linux, le plus proche que j'ai eu était:

  • Éditez /etc/systemd/journald.conf pour définir SystemMaxUse = 1M
  • Journal de redémarrage: sudo systemctl restart systemd-journald
  • Réinitialisation de SystemMaxUse = 200M
  • Redémarrer le journal

Sur mon système, chaque fichier de journal fait 8 Mo, et les fichiers ci-dessus sont tous effacés sauf 3, ce qui porte la taille totale à environ 25 Mo.

Mon cas d' utilisation a été invalidante pour BTRFS CoW (juste pour le répertoire de journal et sous - répertoires): sudo chattr +C /var/log/journal/*. Le problème est que l'attribut n'est défini que sur les fichiers nouvellement créés, d'où le désir de vider le journal.

escale
la source
4
Votre cas d'utilisation n'était en fait pas nécessaire. Le point de désactiver CoW sur le journal est qu’il est fréquemment écrit. Ce n'est pas le cas pour les anciens fichiers de journaux avec rotation, ils restent assis.
Hjulle
1
J'ai défini SystemMaxUse=1K, redémarré systemd-journald, mais journalctl affiche toujours les entrées que je veux supprimer. Comment se passe cette progression à partir de fichiers texte plats?
Dan Dascalescu
13

Depuis --vacuum-timeet --vacuum-sizeje n'ai rien fait pour moi, j'ai fait ce qui suit:

$ sudo find /var/log/journal -name "*.journal" | xargs sudo rm 
$ sudo systemctl restart systemd-journald

Ce n'est pas juste, mais ça a fonctionné.

Mat
la source
Sur Debian Jessie, le chemin est /run/log.
Synchro
1
seulement cela m'a aidé!
T.Todua
C'est la réponse correcte actuellement. Ce serait bien si la commande journalctl pouvait le faire, mais cela semble impossible.
Kevin Lyda
11

Une méthode très brutale pour nettoyer tout le journal:

$ sudo journalctl --vacuum-time=1seconds

Vous pouvez également utiliser --vacuum-sizecomme Michael mentoined.

Lanti
la source
5
N'a pas fonctionné Les entrées d'il y a 15 minutes s'affichent toujours, même après exécution systemctl restart systemd-journald.
Dan Dascalescu
1
Pareil ici. Cela n'a pas fonctionné pour moi non plus. Je cours CentOS7.
jersey bean
5

Les deux options --rotate et --vacuum-time = 1 ne fonctionnaient pas pour moi sur CentOS. J'ai pu effacer ça comme ça:

sudo rm -rf /run/log/journal/*
stiv
la source
J'ai trouvé 2 répertoires avec un nom hexadécimal dans ./journal. Les journalctlcommandes ne fonctionnent que dans la plus récente. J'ai donc dû supprimer l'ancien répertoire manuellement et c'est sûr. Après je limite juste la taille dans le journal conf.
KeitelDOG le
1
  1. Sauvegardez-le au cas où vous en auriez besoin à l'avenir:
    cp /run/log/journal/<temp-string>/system.journal /mylog/dir/back/system.journal.bak

  2. Effacer le fichier:
    cd /run/log/journal/<temp-string>/ >system.journal

  3. Vérifiez pour voir les derniers journaux:
    journalctl -xe

Girish KG
la source
1

journalctl -bmontrera que du démarrage le plus récent. Vous pouvez également utiliser -b -1, -b -2etc. Votre terrible journée est toujours là, mais vous n’aurez pas à la voir, à moins que vous n’ayiez à le faire.

David
la source
0

Ma réponse précédente vient d'être supprimée pour avoir été "dupliquée". Désolé de ne pas avoir été assez clair dans ma réponse précédente, mais c'était différent des réponses existantes. Alors, voici une version plus élaborée:

journalctl -m --vacuum-time=1sa fait le tour pour moi. S'il vous plaît faites remarquer le -mdrapeau , il fusionne tous vos journaux et ensuite les nettoyer. Sans le -mdrapeau, rien n'a été nettoyé dans mon cas (sur CentOS-7).

J'espère que ça aide.

fengye87
la source