Como o logrotate interage com arquivos com link físico?

3

Eu tenho um serviço que insiste em manter seus arquivos de log em locais terríveis. Depois de todos os esforços para mudar onde eles falham, minha próxima ideia foi criar hardlinks para esses arquivos em algum lugar mais limpo. Isso me levou a uma preocupação:

Se eu configurar o logrotate para gerenciar esses arquivos de log, funcionará como pretendido (alternar logs, manter meus links funcionando)? Ou o logrotate acidentalmente quebrará os links e deixará os logs se acumulando em seus locais nativos, mas não no meu central?

Acredito que posso configurar o logrotate para recriar os links físicos após uma rotação, se necessário. Mas é necessário?

    
por Scivitri 13.07.2013 / 07:30

3 respostas

2

Para responder à sua pergunta, depende do tipo de rotação que você faz. Por exemplo, a seguinte progressão ocorrerá:

Método de cópia e truncagem:

  1. Logrotate copia o arquivo de log para um novo arquivo de log.
    • O novo arquivo de log só aparece no local antigo ainda.
  2. Logrotate trunca o arquivo antigo.
    • Isso transforma o arquivo antigo em zero bytes em ambos os locais.
  3. O arquivo de log continua a ser preenchido no aplicativo.

Isso deixa os backups do arquivo de log no local antigo.

A correção para isso é bastante simples: configure o logrotate para girar os logs no novo local. O antigo ainda terá o arquivo crescente, mas será apenas o único.

Método de copiar e criar:

  1. Logrotate copia o arquivo para um novo arquivo de log.
    • Este arquivo de log não é hardlinked e só aparece no novo local.
  2. Logrotate remove o arquivo de log antigo.
    • Devido ao hardlinking, isso apenas remove o hardlink no diretório logrotate. O outro diretório ainda terá uma cópia completa do arquivo.
  3. Logrotate cria um novo arquivo de log.
    • Isso não será vinculado ao outro local.

Esse método é muito problemático e você precisará de um pouco de mágica pós-rotação para limpá-lo.

    
por 13.07.2013 / 14:10
3

Não vincule aos arquivos: vincule ao diretório. Se você vincular ao arquivo, você pode ter um problema quando o aplicativo cria um novo arquivo de log, como parte da rotação do log (dependendo de como isso é feito) ou quando você para e depois reinicia o aplicativo.

ln -s /path/to/where/application/creates/logs/ /var/log/application
    
por 13.07.2013 / 09:22
2

Eu acho que você pode usar links simbólicos para o novo local desejado e dizer ao logrotate para rotacionar os logs em qualquer pasta onde eles residam; ln -s /path/file /path/to/newlink

    
por 13.07.2013 / 07:55