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

12

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

Posso usar o logrotate para obter a maior parte disso, roatando os arquivos no local ou até movê-los para um único diretório diferente usando a olddirdiretiva, 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/*
Dave Forgac
fonte

Respostas:

9

Você deve poder chamar um script externo na postrotatediretiva:

postrotate
  /path/to/your.sh
endscript

e faça com que esse script faça a mudança, 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 dateextdiretiva. Com isso, os arquivos girados serão anexados com um carimbo de data / hora (embora não sejam movidos para um diretório diferente).

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

Ansgar Wiechers
fonte
Parece que postrotatevai fazer o truque. A única coisa que preciso adicionar é limpar os diretórios antigos com mais de uma contagem ou mais de uma data.
Dave Forgac
1
Veja a resposta atualizada. O find | xargscomando deve excluir todos os subdiretórios imediatos de /var/log/examplese eles foram modificados pela última vez há mais de 7 dias.
Ansgar Wiechers
1

Você tem uma olddirdiretiva que pode usar no arquivo de configuração.

A partir da documentação:

olddir
Os logs são movidos para o diretório para rotação. O diretório deve estar no mesmo dispositivo físico que o arquivo de log que está sendo girado e é assumido como sendo relativo ao diretório que contém o arquivo de log, a menos que um nome de caminho absoluto seja especificado. Quando essa opção é usada, todas as versões antigas do log acabam no diretório Esta opção pode ser substituída pela noolddiropção.

Referência : https://manpages.debian.org/jessie/logrotate/logrotate.8.en.html

Eugen Bogdanovich
fonte