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.

Rico
fonte
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.

EightBitTony
fonte
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

Tony Sweeney
fonte
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.

emerino
fonte
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
helvete
fonte
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