logrotate parece funcionar incorreto

2

Estou usando:
Workdesk Linux 3.16.0-31-genérico # 43 ~ 14.04.1-Ubuntu SMP terça-feira, 10 de março 20:13:38 UTC 2015 x86_64 x86_64 x86_64 GNU / Linux

ID do Distribuidor: Ubuntu
Descrição: Ubuntu 14.04.2 LTS
Lançamento: 14.04
Codename: trusty

logrotate 3.8.7-1ubuntu1 amd64

Estou tentando testar o comportamento do logrotate.

meu arquivo conf é:

/home/user/test/*.log {  
       daily  
       rotate 2  
       ifempty  
       su user user  
}  

ls /home/user/test/*.log de saídas

/home/user/test/1.log

sudo logrotate -fv /etc/logrotate.d/r

saídas

reading config file /etc/logrotate.d/r

Handling 1 logs

rotating pattern: /home/user/test/*.log  forced from command line (2 rotations)  
empty log files are rotated, old logs are removed  
switching euid to 1000 and egid to 1000  
considering log /home/user/test/1.log  
  log needs rotating  
rotating log /home/user/test/1.log, log->rotateCount is 2  
dateext suffix '-20150327'  
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'  
renaming /home/user/test/1.log.2 to /home/user/test/1.log.3 (rotatecount 2, logstart 1, i 2),  
old log /home/user/test/1.log.2 does not exist  
renaming /home/user/test/1.log.1 to /home/user/test/1.log.2 (rotatecount 2, logstart 1, i 1),  
old log /home/user/test/1.log.1 does not exist  
renaming /home/user/test/1.log.0 to /home/user/test/1.log.1 (rotatecount 2, logstart 1, i 0),  
old log /home/user/test/1.log.0 does not exist  
log /home/user/test/1.log.3 doesn't exist -- won't try to dispose of it  
renaming /home/user/test/1.log to /home/user/test/1.log.1  
switching euid to 0 and egid to 0  

e depois de ls outputs

1.log.1  

e isso é tudo

Alguém pode explicar a rotação do processo?
1) O que é "renomear /home/user/test/1.log.0 para /home/user/test/1.log.1"? Se eu tiver a contagem de rotação = 0
2) Onde está o arquivo 1.log?
3) onde é 1.log.0? Pelo que entendi eu deveria ter apenas 1.log arquivo vazio e isso é tudo

    
por Ilia 27.03.2015 / 14:53

1 resposta

0

Seu arquivo de configuração pede para girar o arquivo *.log em /home/user/test todos os dias, mesmo se o arquivo estiver vazio e preservar dois arquivos antigos.

logrotate execute esta ação (como você pode ver na saída detalhada):

  • alterar usuário e grupo (devido a su user user )
  • renomear registros antigos, se existir, a partir de 1.log.2 (devido a rotate 2 )
  • remover 1.log.3 se existir (devido a rotate 2 )
  • renomear atual 1.log em 1.log.1
  • alternar usuário e grupo

Assim, como esperado, no final você encontrou 1.log.1 que deveria ser 1.log do arquivo renomeado.

Renomear processo imprime erro, mas o logrotate não falha, se o arquivo de log antigo não existir, o que ainda não foi criado nos dias anteriores.

Se um aplicativo estiver gravando em 1.log , após a rotação do log, ele ainda gravará em 1.log.1 porque renomear o arquivo não altera o inode do arquivo. Nesse caso, você deve forçar o aplicativo a fechar o arquivo de log atual e reabri-lo, usando sua reinicialização normal.

Aqui está um link útil sobre como fazer.

Não consigo explicar por que o logrotate tenta renomear 1.log.0 , parece um erro de implementação que não causa nenhum bug.

    
por Lety 19.04.2015 / 21:10