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


57

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

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

Quando corro logrotate -d nexus, recebo 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 esperava era que o arquivo nexus.log tivesse sido truncado e um novo arquivo, algo como nexus.log-201106241000, teria sido criado.


Além disso, lembre-se de que, quando você usa a opção -d, NÃO GIRARÁ LOGS. Ele mostra o que seria executado sem a opção, como um plano de jogo. Causou-me algumas dores de cabeça sérias quando pensei que podia vê-las girando e elas ainda estavam lá.
— Maxwell Flanders

Respostas:


64

Provavelmente, o arquivo de log tem menos de um dia e / ou foi rotacionado no último dia e o logrotate lembra o 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 -d).

Você pode olhar para 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.


4
No FreeBSD é /var/run/logrotate.status
— kaleissin:

Também verifique se há possibilidade de utilização do argumento -s na invocação para localização arquivo de status
— JGurtz

2
-d+ -fFaz relatório logrotate "necessidades de giro" para todos os arquivos, mesmo os que não correspondem
— Fluffy

Para adicionar isso, editar a data no arquivo de status para ser mais antigo que a política de rotação é suficiente para convencer que logrotateele precisa girar o log quando for executado novamente.
— Centimane

No CentOS, modifiquei /var/lib/logrotate.status para fazer o logrotate funcionar. Conforme indicado pelo EightBitTony, o logrotate diário lembrará o histórico. A menos que o arquivo já esteja no histórico com uma data no passado, a rotação do log não girará o arquivo.
— Mark

58

Na primeira vez em que você executa o logrotate com uma nova configuração de log, ele não sabe quando ocorreu a última rotação do log; portanto, apenas grava uma linha de status no /var/lib/logrotate/statussentido de que foi executada hoje.

Quando é executado posteriormente no dia seguinte, ele vê que o log tem um dia e o gira conforme o esperado. Se você não quiser esperar, edite o arquivo de status do logrotate e escolha a data de status do seu log para o dia anterior.

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


5

Às vezes, mesmo se você executar o logrotate manualmente, isso não funcionará se você fizer no mesmo dia e tiver dateextum valor em que o valor padrão não inclua senconds (por exemplo -%Y%m%d). Nem mesmo se você modificar o arquivo de status do logrotate ou ao usar a diretiva de tamanho (por exemplo size 200M). Pelo menos no CentOS 6, o logrotate falhará ao rotacionar 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 logrotatepara mais informações.


1

Cuidado ao executar

logrotate -vdf /etc/logrotate.conf

o evento, embora apenas o simulado seja registrado /var/lib/logrotate.status e as execuções subsequentes do logrotate responderão com o mencionado

log does not need rotating

11
Não consigo reproduzir isso no Ubuntu (16.04 e 17.04). Se "/var/lib/logrotate.status" for usado, você deverá usar outra distribuição. O Ubuntu registra em "/ var / lib / logrotate / status".
— Philipp Claßen

2
@ Philipp Claßen: Você está certo quanto a isso (arquivo de status colocado em /var/lib/logrotate.status) foi observado durante a depuração da configuração do Logrotate 3.10 no Alpine linux 3.5 dentro de um contêiner de docker. Mas não há bandeira do Ubuntu na definição da pergunta, é?
— helvete

11
Sim, está tudo bem. Eu apenas mencionaria isso porque o Ubuntu é muito popular. Suponho que muitas pessoas leiam essa pergunta porque desejam consertar seu servidor, que hoje geralmente roda com o Ubuntu.
— Philipp Claßen

11
OK está certo. Para completar, posso acrescentar que o local do arquivo de status na distribuição Centos 7 está em/var/lib/logrotate/logrotate.status
— helvete
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.