Como posso rotacionar muitos arquivos de log em um subdiretório diferente por rotação?

11

Eu tenho um diretório com muitos arquivos de log, que eu gostaria de rotacionar diariamente. Para fins organizacionais, gostaria de poder mover os logs girados para um diretório (ou subdiretório) diferente, nomeado por data, mantendo a última semana de registros.

Eu posso usar logrotate para obter a maior parte disso roatando os arquivos in-loco ou até mesmo movê-los para um único diretório diferente usando a diretiva olddir , mas estou tendo problemas para encontrar uma solução para criar subdiretórios individuais por rotação. Como posso conseguir isso?:

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

Desired target directories (keeping a week):
    /var/log/example/20121006/*
    [ ... ]
    /var/log/example/20121012/*
    
por Dave Forgac 12.10.2012 / 20:48

2 respostas

8

Você deve poder chamar um script externo na diretiva postrotate :

postrotate
  /path/to/your.sh
endscript

e que esse script faça o movimento, por exemplo:

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

No entanto, pode ser mais fácil usar apenas a diretiva dateext . Com isso, os arquivos rotacionados serão anexados com um timestamp (embora não sejam movidos para um diretório diferente).

Veja logrotate(8) para detalhes sobre as duas diretivas.

    
por 12.10.2012 / 21:46
0

Você tem a diretiva "olddir" que pode usar no arquivo de configuração

olddir directory
Logs are moved into directory for rotation. The directory must be on the same physical device as the log file being rotated, and is assumed to be relative to the directory holding the log file unless an absolute path name is specified. When this option is used all old versions of the log end up in directory. This option may be overridden by the noolddir option.

link

    
por 03.11.2017 / 10:53