sintaxe do arquivo de configuração logrotate - várias entradas curinga são possíveis?

83

Como a página de manual não responde à minha pergunta e não quero forçar um ciclo de rotação, decidi fazer a pergunta aqui.

A página do manual para logrotate fornece o seguinte exemplo:

   "/var/log/httpd/access.log" /var/log/httpd/error.log {
       rotate 5
       mail [email protected]
       size 100k
       sharedscripts
       postrotate
           /usr/bin/killall -HUP httpd
       endscript
   }

Todos os exemplos com curingas contêm apenas uma única entrada. Agora, o que me interessa é se este também é permitido:

   /var/log/httpd/*.log /var/log/httpd/*/*.log {
       # ... same as above
   }

Aqui está o raciocínio: tenho vários fantasmas e os divido pelo usuário que "possui" esses fantasmas. Como os arquivos de log são legíveis por todo o mundo, desejo montar uma pasta no diretório inicial do usuário, mas limitá-la aos arquivos de log que o usuário "possui", o que é mais fácil de obter ao separar os logs em pastas (e vincular montagem requer esse esquema de qualquer maneira). Portanto, estou procurando uma solução para girar os arquivos de log /var/log/httpde todos os arquivos de subdiretórios desse diretório - sem precisar listar todos os subdiretórios por nome.

Em geral, a página de manual não dá idéia se várias entradas são possíveis para regras de curinga ou apenas para caminhos completos. Estou usando o logrotate versão 3.7.8-6, que vem com o Debian "Squeeze", mas acho que isso não é necessariamente específico para uma versão de distro ou programa.

0xC0000022L
fonte

Respostas:

118

Sim, você pode usar vários curingas. Você pode testar seu arquivo sem executar as rotações reais, fazendo o seguinte:

logrotate -d -f /etc/logrotate.conf
  • -d = Liga o modo de depuração. No modo de depuração, nenhuma alteração será feita nos logs ou no arquivo de estado de rotação de log.

  • -f = Diz ao logrotate para forçar a rotação, mesmo se achar que isso não é necessário. Às vezes, isso é útil após a adição de novas entradas à rotação do log ou se os arquivos de log antigos foram removidos manualmente, à medida que os novos arquivos serão criados e o registro continuará corretamente.

Dennis Williamson
fonte
3
Muito obrigado! Apenas tentei e funciona. Parece que, na saída, espera-se que os curingas funcionem como no shell.
0xC0000022L 10/03
24

Eu só queria esclarecer, porque é isso que eu vim aqui procurando fazer,

É permitido especificar vários arquivos de log para uma única configuração, por exemplo

/var/log/httpd/access.log
/var/log/httpd/error.log
/var/log/httpd/mysite/*.log
{
    rotate 5
    mail [email protected]
    size 100k
    sharedscripts
    postrotate
        /usr/bin/killall -HUP httpd
    endscript
}
ThorSummoner
fonte
//, não há um problema com os diferentes caminhos que ocorrem em várias linhas?
Nathan Basanese
@ NathanBasanese Eu não entendo sua pergunta completamente, acho que você pode apontar as linhas do caminho para os arquivos em qualquer lugar do disco que desejar, nem todos eles precisam estar no mesmo prefixo de diretório.
ThorSummoner
@NathanBasanese oh, eu acho que entendo, ter vários destinos de rotação de log em linhas diferentes parece ser um uso normal, copiei esse formulário de outros scripts logrotate.d, por exemplo /etc/logrotate.d/rsyslog
ThorSummoner
4

Na página do manual para logrotate :

Observe que os nomes dos arquivos de log podem estar entre aspas (e essas aspas são necessárias se o nome contiver espaços). Regras de cotação de shell normais se aplicam, com ', "e \ caracteres suportados.

Lembre-se de modificar ou remover aspas ao passar de um para vários padrões:

Isso funciona:

/var/log/*.log /var/log/*.blog {

isso funciona também:

/var/log/*.log
/var/log/*.blog {

Isso não funciona:

'/var/log/*.log /var/log/*.blog' {

e nem isso:

"/var/log/*.log /var/log/*.blog" {

Compare com o estojo de padrão único.

Isso funciona:

'/var/log/*.log' {

e isso também funciona:

"/var/log/*.log" {

Testado com logrotate 3.10.0

Piotr Dobrogost
fonte
2
Seria interessante saber se isso funciona:"/var/space /log/*.log" "/var/log/*.blog"
KajMagnus 23/03