Comment puis-je faire pivoter de nombreux fichiers journaux dans un sous-répertoire différent par rotation?

12

J'ai un répertoire avec de nombreux fichiers journaux, que j'aimerais faire tourner quotidiennement. Pour des raisons d'organisation, j'aimerais pouvoir déplacer les journaux tournés dans un autre répertoire (ou sous-répertoire) nommé par date, en conservant la dernière semaine de journaux.

Je peux utiliser logrotate pour réaliser la plupart de ces opérations en itinérant les fichiers sur place ou même en les déplaçant vers un seul répertoire différent à l'aide de la olddirdirective, mais j'ai du mal à trouver une solution pour créer des sous-répertoires individuels par rotation. Comment puis-je atteindre cet objectif?:

Logs to rotate: /var/log/example/*

Desired target directories (keeping a week):
    /var/log/example/20121006/*
    [ ... ]
    /var/log/example/20121012/*
Dave Forgac
la source

Réponses:

9

Vous devriez pouvoir appeler un script externe dans la postrotatedirective:

postrotate
  /path/to/your.sh
endscript

et demandez à ce script de se déplacer, par exemple:

#!/bin/bash

newdir=/var/log/example/`date +%Y%m%d`

mkdir $newdir
mv /var/log/example.1.gz $newdir

find /var/log/example -mindepth 1 -maxdepth 1 -mtime +7 \
  -type d -print0 | xargs -0 rm -rf

Cependant, il pourrait être plus simple d'utiliser simplement la dateextdirective. Avec cela, les fichiers pivotés seront ajoutés avec un horodatage (bien qu'ils ne soient pas déplacés vers un répertoire différent).

Voir logrotate(8)pour plus de détails sur les deux directives.

Ansgar Wiechers
la source
Il semble que postrotatecela fera l'affaire. La seule chose que je dois ajouter est de purger les anciens répertoires qui dépassent un certain nombre ou qui dépassent une certaine date.
Dave Forgac
1
Voir la réponse mise à jour. La find | xargscommande doit supprimer tous les sous-répertoires immédiats de la /var/log/exampledernière modification effectuée il y a plus de 7 jours.
Ansgar Wiechers du
1

Vous avez une olddirdirective que vous pouvez utiliser dans le fichier de configuration.

De la documentation:

olddir
Les journaux sont déplacés dans le répertoire pour rotation. Le répertoire doit se trouver sur le même périphérique physique que le fichier journal en cours de rotation et est supposé être relatif au répertoire contenant le fichier journal, sauf si un nom de chemin absolu est spécifié. Lorsque cette option est utilisée, toutes les anciennes versions du journal se retrouvent dans le répertoire. Cette option peut être remplacée par l' noolddiroption.

Référence : https://manpages.debian.org/jessie/logrotate/logrotate.8.en.html

Eugen Bogdanovich
la source