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.
Respostas:
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.fonte
-d
+-f
Faz relatório logrotate "necessidades de giro" para todos os arquivos, mesmo os que não correspondemlogrotate
ele precisa girar o log quando for executado novamente.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/status
sentido 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
fonte
Às vezes, mesmo se você executar o logrotate manualmente, isso não funcionará se você fizer no mesmo dia e tiver
dateext
um 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 exemplosize 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 dedateext
, com um valor como:%Y%m%d%s
.Veja
man logrotate
para mais informações.fonte
Cuidado ao executar
o evento, embora apenas o simulado seja registrado
/var/lib/logrotate.status
e as execuções subsequentes do logrotate responderão com o mencionadofonte
/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, é?/var/lib/logrotate/logrotate.status