Come posso ruotare molti file di registro in una sottodirectory diversa per rotazione?


12

Ho una directory con molti file di registro, che vorrei ruotare ogni giorno. A fini organizzativi, vorrei poter spostare i registri ruotati in una directory (o sottodirectory) diversa denominata per data, mantenendo l'ultima settimana di registri.

Posso usare logrotate per ottenere la maggior parte di questo, eseguendo il roating dei file sul posto o addirittura spostandoli in una singola directory diversa usando la olddirdirettiva, ma ho difficoltà a trovare una soluzione per creare singole sottodirectory per rotazione. Come posso raggiungere questo obiettivo?:

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

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

Risposte:


9

Dovresti essere in grado di chiamare uno script esterno nella postrotatedirettiva:

postrotate
  /path/to/your.sh
endscript

e fai in modo che lo script faccia lo spostamento, ad esempio

#!/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

Tuttavia, potrebbe essere più semplice utilizzare la dateextdirettiva. Con ciò i file ruotati verranno aggiunti con un timestamp (anche se non spostati in una directory diversa).

Vedi i logrotate(8)dettagli su entrambe le direttive.


Sembra che postrotatefarà il trucco. L'unica cosa che devo aggiungere è eliminare le vecchie directory che sono oltre un certo conteggio o più vecchie di una certa data.
Dave Forgac,

1
Vedi la risposta aggiornata. Il find | xargscomando dovrebbe eliminare tutte le sottodirectory immediate /var/log/examplese sono state modificate l'ultima volta più di 7 giorni fa.
Ansgar Wiechers,

1

Hai una olddirdirettiva che puoi usare nel file di configurazione.

Dalla documentazione:

olddir
I registri vengono spostati nella directory per la rotazione. La directory deve trovarsi sullo stesso dispositivo fisico del file di registro che viene ruotato e si presume che sia relativa alla directory che contiene il file di registro a meno che non venga specificato un nome percorso assoluto. Quando viene utilizzata questa opzione, tutte le vecchie versioni del registro finiscono nella directory. Questa opzione può essere ignorata noolddirdall'opzione.

Riferimento : https://manpages.debian.org/jessie/logrotate/logrotate.8.en.html

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.