Page 1 sur 1

[systemd]La taille de systemd.journal(résolu)

Publié : jeu. 06 déc. 2012, 14:17
par karhu
Bonjour
Je cherche un moyen de limiter la taille et le contenu de system.journal.
Je m'explique, je souhaiterai avoir un fichier system.journal qui ne contienne que les messages correspondants à la session en cours. C'est à dire tous les messages depuis le démarrage jusqu'à l'arrêt du PC. En gros il serait bien (pour moi) si le fichier n'existait pas, ou était vide au départ.
Cette manipulation pouvait se faire avec sysinit dans le fichier rc.local.shutdown (non je ne suis pas nostalgique :mrgreen: ) comment puis je faire cela maintenant ?
En configurant journal.conf ?
En créant un service à l'extinction ? Et comment ?
Garder les fichiers (momentanément) par journée d'activité ? La suppression en serait facilité.
C'est peut-être un tord, mais je ne consule le journal que lorsque j'ai un problème, et je le trouve trés volumineux et donc pas trés facile à consulter surtout quand on ne sait pas exactement quoi chercher.

Re: [systemd]La taille de system.journal

Publié : jeu. 06 déc. 2012, 14:23
par tuxce
Il te suffit de supprimer /var/log/journal.
Par contre, il faut indiquer à pacman de ne pas le créer à la mise à jour de systemd :

Code : Tout sélectionner

NoExtract = /var/log/journal

Re: [systemd]La taille de system.journal

Publié : jeu. 06 déc. 2012, 15:05
par karhu
Je ne comprends pas bien.
Si je supprime /var/log/journal où trouverai je les messages du système (system.journal) ?
<hs> Comment fais tu pour griser un peu de texte ?</hs>

EDIT : comment lire le fichier user-1000.journal ?

Re: [systemd]La taille de system.journal

Publié : jeu. 06 déc. 2012, 15:27
par tuxce
Le journal est dans /run/log ([ c] [ /c] pour griser).
Il ne se lit pas en direct, mais par le biais de journalctl

Re: [systemd]La taille de system.journal

Publié : jeu. 06 déc. 2012, 15:30
par FoolEcho
karhu a écrit :EDIT : comment lire le fichier user-1000.journal ?
journalctl _UID=1000 ? ... à condition d'être root ou adm sinon tu es limité à ton seul journal.

Re: [systemd]La taille de system.journal

Publié : jeu. 06 déc. 2012, 15:40
par karhu
@foolEcho ok, merci.
@tuxce actuellement mon répertoire /run/log/ est vide. Serait ce parce que /var/log/journal existe ?

Question subsidiaire : à quoi servent les répertoires /var/tmp/systemd-private-xxxxx et comment les limiter ?

Re: [systemd]La taille de system.journal

Publié : jeu. 06 déc. 2012, 16:03
par tuxce
Oui /run/log/ est vide parce que /var/log/journal existe.
Pour les /var/tmp/systemd-private-xxxxx, c'est à chaque fois que tu (enfin la configuration) indiques à systemd de fournir un dossier tmp privé, il en crée un pour tmp et un pour /var/tmp.

Re: [systemd]La taille de system.journal

Publié : jeu. 06 déc. 2012, 16:30
par karhu
Donc pour limiter ces répertoires j'aurais intérêt à remplacer /var/tmp par un lien symbolique vers /tmp.
Quand à system.journal si je veux conserver juste le dernier il me suffirai de créer un service qui recopie /run/log/system.journal dans /var/log/system.journal au moment du shutdown. De cette manière j'aurais toujours le journal de la dernière période d'activité puisqu'à chaque fermeture il écraserait l'ancien lors de la copie.
Pour remplacer /share/lib/systemd/shutdown.target.wants/@rc.local-shutdown.service je crée un script qui fait le boulot et je modifie la ligne de commande avec mon script.

Code : Tout sélectionner

ConditionFileIsExecutable=/etc/local.shutdown
....
ExecStart=/etc/local.shutdown
Je pense que je devrai modifier aussi

Code : Tout sélectionner

After=rc-local.service basic.target
pour le rendre indépendant de sysinit.

Re: [systemd]La taille de system.journal

Publié : jeu. 06 déc. 2012, 17:06
par oktoberfest
/var/tmp est fait pour les fichiers temporaires qui doivent persister suite à un redémarrage. Donc un lien vers /tmp n'est pas une bonne idée. J'imagine que systemd doit faire le ménage dans ce répertoire (je n'ai pas de répertoire antérieur au 9 novembre sur mon serveur).

Re: [systemd]La taille de system.journal

Publié : jeu. 06 déc. 2012, 17:07
par benjarobin
Je te déconseille fortement de remplacer /var/tmp par un lien symbolique vers /tmp.
Le but de /var/tmp est d'être conservé entre 2 boot, tu risques d'avoir des soucis si tu fait un lien symbolique.
Grillé :D

Re: [systemd]La taille de system.journal

Publié : jeu. 06 déc. 2012, 17:23
par karhu
Donc je le garde et je le nettoierai une fois par semaine en même temps que ma mise à jour.
@oktoberfest la dernière fois j'avais 192 de ces répertoires :x .
D'accord ils sont vides, mais quand même.
Et pour le fichier script que dois je changer pour le rendre indépendant de rc-local.service ?

Re: [systemd]La taille de system.journal

Publié : jeu. 06 déc. 2012, 17:26
par tuxce
karhu a écrit : Quand à system.journal si je veux conserver juste le dernier il me suffirai de créer un service qui recopie /run/log/system.journal dans /var/log/system.journal au moment du shutdown.
Alors, j'avais pas compris que tu voulais garder le dernier log après redémarrage.
Pour cela, je te conseille plutôt de limiter la taille (c'est déjà limité à 10% de l'espace de la partition par défaut et ça laisse toujours 5% de l'espace libre).

Re: [systemd]La taille de systemd.journal

Publié : jeu. 06 déc. 2012, 18:56
par karhu
La solution envisagée, qui me conviendrait très bien, est la suivante.
À l'extinction de la machine, mon script sauvegarde /run/log/system.journal dans /var/log/system.journal.date (des fois que je veuille en garder plusieurs :D ).
Comme je n'ai plus de répertoire /var/log/journal le contenu de system.journal.date contient tout les messages du boot précédent jusqu'au halt. En cas de problème j'ai donc le fichier /run/log/system.journal qui m'indique ce qui ne va pas et le fichier /var/log/system.journal.hier qui me montre comment ça marchait.
Voilà le script :

Code : Tout sélectionner

#!/bin/bash
#
### Préservation du dernier journal système : /etc/local.shutdown
#
# le répertoire /var/log/journal étant supprimé il faut sauvegarder system.journal
# pour éviter la recréation de ce répertoire ajouter dans /etc/pacman.conf
#       NoExtract = /var/log/journal
#
jour=`date '+%y_%m_%d'`;
cp /run/log/system.journal /var/log/system.journal.$jour;
Il est perfectible bien sûr :wink: .

Re: [systemd]La taille de systemd.journal

Publié : jeu. 06 déc. 2012, 19:50
par benjarobin
Sinon pour les dossiers /var/tmp/systemd-private-* ils sont nettoyés automatiquement s'il sont plus âgé de 30j (configuration par défaut). Certes cela fait beaucoup de dossier et alors ? Ils sont vides :-)
Voir ce sujet https://bbs.archlinux.org/viewtopic.php?pid=1171580 et ces 3 fichiers :

Code : Tout sélectionner

/usr/lib/tmpfiles.d/tmp.conf
/usr/lib/systemd/system/systemd-tmpfiles-clean.timer
/usr/lib/systemd/system/systemd-tmpfiles-clean.service

Re: [systemd]La taille de systemd.journal

Publié : ven. 07 déc. 2012, 10:28
par karhu
Une dernière petite interrogation pour voir si je commence à comprendre systemd.
Voici mon local-shutdown.service :

Code : Tout sélectionner

[Unit]
Description=Local actions before halt
ConditionFileIsExecutable=/etc/local.shutdown
DefaultDependencies=no
After=shutdown.target
Before=shutdown.target

[Service]
Type=oneshot
ExecStart=/etc/local.shutdown
StandardInput=tty
RemainAfterExit=yes
After et Before précisent ils bien le moment exact de l'exécution ?
Il n'y a pas de section [Install], est ce grave ?
StandardInput=tty et RemainAfterExit=yes sont ils bien nécessaires ? Comme ils étaient dans rc-local-shutdown.service je l'ai y laissés :oops:

Re: [systemd]La taille de systemd.journal

Publié : ven. 07 déc. 2012, 10:34
par benjarobin
After (Après) et Before (Avant) indique bien ce que le mot veux dire.
Donc cette condition n'a pas de sens... Tu peux voir "shutdown.target" comme un événement temporel.
Et non il n'y a rien de précis, systemd lance le script comme il veux tant qu'il respecte les règles que tu lui donnes

Sinon j'ajouterai bien ceci :

Code : Tout sélectionner

[Install]
WantedBy=shutdown.target
Ce qui donne

Code : Tout sélectionner

[Unit]
Description=/etc/rc.local.shutdown Compatibility
ConditionFileIsExecutable=/etc/local.shutdown
DefaultDependencies=no
After=basic.target
Before=shutdown.target

[Service]
Type=oneshot
ExecStart=/etc/local.shutdown
StandardInput=tty
RemainAfterExit=yes

[Install]
WantedBy=shutdown.target

Re: [systemd]La taille de systemd.journal

Publié : ven. 07 déc. 2012, 11:22
par karhu
Merci. Je corrige, je teste et je passe en résolu.

Édition : ça marche.
Si cela intéresse voici les fichiers : /etc/local.sutdown

Code : Tout sélectionner

#!/bin/bash
#
### Préservation du dernier journal système : /etc/local.shutdown
#
# le répertoire /var/log/journal étant supprimé il faut sauvegarder system.journal
# pour éviter la recréation de ce répertoire ajouter dans /etc/pacman.conf
#	NoExtract = /var/log/journal
#
jour=`date '+%y_%m_%d'`;
if [ -f "/run/log/system.journal" ];
then
  cp /run/log/system.journal /var/log/system.journal.$jour;
else
  echo "le fichier /run/log/system.journal n'existe pas" > /var/log/system.journal.$jour;
fi
chmod 644 /var/log/system.journal.$jour;
pour ne garder que le dernier fichier cette seule commande :

Code : Tout sélectionner

#!/bin/bash
cp /run/log/system.journal /var/log/system.journal
/usr/lib/systemd/system/local-shutdown.service

Code : Tout sélectionner

[Unit]
Description=Local actions before halt
ConditionFileIsExecutable=/etc/local.shutdown
DefaultDependencies=no
After=basic.target
Before=shutdown.target

[Service]
Type=oneshot
ExecStart=/etc/local.shutdown
StandardInput=tty
RemainAfterExit=yes

[Install]
WantedBy=shutdown.target
EDITION :
Le script de copie ne fonctionne pas, car le fichier system.journal n'est pas dans le répertoire /run/log/journal
mais

dans /run/log/journal/xxxxxxxxxxxxxxxxxxxxxxxxxxx/
Je regarde, je corrige et je poste. :oops: :oops:

Re: [systemd]La taille de systemd.journal(résolu)

Publié : ven. 07 déc. 2012, 21:05
par karhu
Voilà, voilà.
Maintenant je teste si le répertoire /run/log/journal existe, si non il n'y a rien à faire.
Puis je récupère le répertoire de travail et enfin je sauvegarde le fichier system.journal.

Code : Tout sélectionner

#!/bin/bash
#
### Préservation du dernier journal système : /etc/local.shutdown
#
# le répertoire /var/log/journal étant supprimé il faut sauvegarder system.journal
# pour éviter la recréation de ce répertoire ajouter dans /etc/pacman.conf
#	NoExtract = /var/log/journal
#
if [ -d /run/log/journal ];
then
  jour=`date '+%y_%m_%d'`;
  rep=`ls -A /run/log/journal`;
  if [ "/run/log/journal/$rep/system.journal" ];
  then
    cp /run/log/journal/$rep/system.journal /var/log/system.journal.$jour;
  else
    echo "le fichier /run/log/journal/$rep/system.journal n'existe pas" > /var/log/system.journal.$jour;
  fi
  chmod 644 /var/log/system.journal.$jour;
fi
Avec toutes mes excuses pour la précipitation.

Re: [systemd]La taille de systemd.journal(résolu)

Publié : ven. 07 déc. 2012, 21:50
par Ypnose
Je chipote mais le point virgule n'est pas nécessaire après la déclaration des variables, après le chmod et aussi après la ligne then et else.

Re: [systemd]La taille de systemd.journal(résolu)

Publié : ven. 07 déc. 2012, 22:18
par karhu
Tu as raison, il n'est pas indispensable parce que le BASH est permissible !
C'est une vieille habitude héritée du C.
De plus en cas de longues séquences sur plusieurs lignes cela termine correctement la commande.
Par contre il est indispensable à la fin du test if [ ? ]; donc autant le mettre partout. :wink: