Logrotate: “log não precisa ser rotacionado” por quê?

54

Eu tenho a seguinte nova configuração de logrotate:

/var/log/nexus/nexus.log {
    rotate 7
    missingok
    compress
    delaycompress
    copytruncate
    daily
}

Quando executo logrotate -d nexus , obtenho o seguinte:

reading config file nexus
reading config info for /var/log/nexus/nexus.log

Handling 1 logs

rotating pattern: /var/log/nexus/nexus.log  after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/nexus/nexus.log
  log does not need rotating

Minha pasta / var / log / nexus / contém o seguinte:

nexus.log
oldlogs.tar.gz

Por que o LogRotate não está girando o arquivo nexus.log? O que eu estava esperando era que o arquivo nexus.log teria sido truncado e um novo arquivo, algo como nexus.log-201106241000, teria sido criado.

    
por Rich 24.06.2011 / 10:04

4 respostas

59

O mais provável é que o arquivo de log tenha menos de um dia e / ou tenha sido rotacionado no último dia e o logrotate se lembra do histórico.

Se você adicionar -f , forçará uma rotação se você realmente quiser (embora não tenha 100% de certeza de como isso interage com -d ).

Você pode ver o histórico, a localização depende da sua distribuição, mas pode ser /var/lib/logrotate/status . Esse arquivo mostra quando os logs foram girados pela última vez.

    
por 24.06.2011 / 10:14
54

A primeira vez que você executa o logrotate com uma nova configuração de log, ele não sabe quando a última rotação de log ocorreu, então ele apenas escreve uma linha de status em /var/lib/logrotate/status para o efeito que foi executado hoje.

Quando ele é executado subseqüentemente no dia seguinte, ele verifica que o log tem um dia de existência e o rotaciona conforme o esperado. Se você não quiser esperar, edite o arquivo de status do logrotate e ganhe a data de status do seu registro de volta ao dia anterior.

Quando você executa o logrotate manualmente, ele funcionará como esperado

    
por 21.10.2013 / 12:53
5

Às vezes, mesmo que você execute logrotate manualmente, isso não funcionará se você fizer isso no mesmo dia e tiver dateext , em que o valor padrão não inclui senconds (por exemplo, -%Y%m%d ). Nem mesmo se você modificar o arquivo de status do logrotate ou quando usar a diretiva size (por exemplo, size 200M ). Pelo menos no CentOS 6, o logrotate não conseguirá rodar o seu arquivo de log porque ele já existe.

Para resolver isso, você precisa usar dateformat em vez de dateext , com um valor como: %Y%m%d%s .

Veja man logrotate para mais informações.

    
por 24.02.2015 / 07:33
1

Cuidado com isso executando

logrotate -vdf /etc/logrotate.conf

o evento, embora apenas simulado, será registrado em /var/lib/logrotate.status e as corridas logrotate subseqüentes responderão com o mencionado

log does not need rotating
    
por 09.06.2017 / 12:59

Tags