logrotate diariamente e tamanho?

40

Se uma configuração de logrotate for especificada com os parâmetros "size" e "daily", qual deles tem precedência? Onde isso está documentado? Eu gostaria que essas rotações ocorressem como uma operação OR booleana, ou seja, se os logs tiverem um dia de idade, eles serão rotacionados, OU se forem maiores que um determinado tamanho, eles também serão rotacionados. No entanto, atualmente o logrotate está apenas usando a diretiva "size" e parece estar ignorando a diretiva "daily". O Logrotate está configurado para ser executado a cada hora. OS é linux, Red Hat e derivados Debian.

Além disso, estou especificando "diariamente" primeiro e depois "tamanho" desde o início do arquivo. Não tenho certeza se o pedido é importante, mas, em qualquer caso, é preciso primeiro no arquivo de configuração ...

Obrigado!

calças de gato
fonte
2
Ver também serverfault.com/questions/474941/...
Belacqua
> Definições locais substituir os globais e definições posteriores> substituir os anteriores a partir da página de manual de logrotate 3.8.7
John Bob Joe

Respostas:

62

Se a diretiva de tamanho for usada, o logrotate ignorará as diretivas diárias , semanais , mensais e anuais . Isso não está claro na documentação quando você executa o man logrotatecomando. No entanto, isso pode ser confirmado na prática e é mencionado em algumas postagens arbitrárias no blog como esta .

Há uma diretiva chamada minsize que, de acordo com a página do manual logrotate, é a única diretiva de tamanho que pode ser usada em conjunto com as da hora. No entanto, ainda não é o que você deseja. O uso do minsize com o diário diz essencialmente: gire os logs diariamente, mas somente quando tiverem pelo menos # MB de tamanho .

Até o momento, não encontrei nenhuma maneira com o logrotate para executar a condição necessária: gire todos os dias, a menos que o tamanho exceda #MB, nesse caso, gire imediatamente . Eu não acho que isso seja suportado usando apenas diretivas de logrotate. Pode ser possível usar scripts inteligentes por meio das diretivas de gancho de script, como prerotate , póstrotate , firstaction e lastaction .

Atualização :

A partir do logrotate 3.8.1, maxsizee timeperiodsão suportados juntos, o que seria a solução ideal. Veja a resposta para esta postagem: Como girar o log com base em um intervalo, a menos que o log exceda um determinado tamanho?

gregtczap
fonte
4
A melhor opção seria provavelmente usar dois comandos cron separados, executar para executá-lo diariamente com o conf padrão e um a cada x minutos que faz uma configuração apenas com os arquivos com os quais você se preocupa em transbordar usando a diretiva size e não o diário.
precisa
8
A partir do logrotate 3.81, maxsizee timeperiodsão suportados. Por serverfault.com/questions/474941/…
belacqua
11
@belacqua Estou usando 3.8.7 e o período de tempo não está no homem.
JorgeeFG
A versão correta é realmente 3.8.1, não 3.81.
Tom Miller
2

A primeira resposta do @egg é que, de acordo com minhas experiências com o logrotate, não é verdade!

Se diariamente, mensalmente ... chegar primeiro e depois dessa diretiva de tamanho , diariamente, mensalmente ... será ignorado e a diretiva de tamanho será aplicada ao arquivo de log.

Da mesma forma, quando eu uso pela primeira vez a diretiva de tamanho, as diretivas diárias, semanais, mensais e anuais , a diretiva de tamanho será ignorada.

SENHORA
fonte
1

Se você adicionar Diariamente, ele será rotacionado todos os dias, mesmo que a condição Tamanho seja atendida. Se você também adicionar a condição de tamanho, poderá fazer duas rotações em um dia, dependendo de quão detalhada é a criação de log.

Se Diário for o primeiro no script, o Tamanho poderá não ser acionado.

Paul Hickox
fonte
use a opção detalhada para ver quais regras são usadas. Dos meus testes, acredito que apenas a última regra é usada porque regras mais específicas podem substituir regras mais gerais.
Bram
Mais rotações são aceitáveis, pois esse seria o comportamento esperado. (OR booleano) No entanto, meu problema é que essas rotações não estão ocorrendo. Parece ser um bug (possivelmente um recurso) da rotação do log, pois não consigo ver a ordem das diretivas sendo importantes ou documentadas em qualquer lugar.
cat pants
você pode dar um exemplo do seu logrotate.conf e dos arquivos que você está tentando direcionar? Diariamente não tem uma condição diferente da progressão do tempo. O tamanho é condicional.
Paul Hickox
/tmp/output.log {tamanho diário 1k rodar 5}
cat pants
11
Este arquivo fica rodado quando o tamanho é maior do que 1k, mas é não girado diariamente como esperado e desejado.
cat pants
1

Na verdade, minha página de manual no Red Hat parece ser bastante clara sobre as diferenças entre tamanho e tamanho mínimo:

tamanho minimo

          Log  files  are rotated when they grow bigger then size bytes,
          but  not  before  the  additionally  specified  time  interval
          (daily,  weekly, monthly, or yearly).  The related size option
          is similar except that it is mutually exclusive with the  time
          interval  options, and it causes log files to be rotated with-
          out regard for the last rotation time.  When minsize is  used,
          both the size and timestamp of a log file are considered.
Geoffrey M.
fonte