Como configurar o logrotate para não excluir meus arquivos de log após a rotação?

24

Existe uma maneira de fazer isso?

Guilherme
fonte
Você pode nos dizer por que deseja fazer isso? Talvez haja outras opções ...
chmeee
No meu caso, seria bom fazer o download de grandes logs antigos para armazenamento externo e manter novos no servidor. Então, eu preciso de um divisor de logs simples.
sekrett
2
Meu caso de uso para esta configuração é: desejo manter meu log para sempre, pois pode ser necessário para fins de auditoria, MAS quero que meus arquivos sejam girados para que o log atual não fique muito grande e os rotacionados possam ser compactado - caso contrário, o backup dos logs em um servidor externo é muito difícil e a inspeção dos arquivos também fica muito lenta.
Rudolf Mayer

Respostas:

32

No seu logrotate.conf (ou no arquivo logrotate.d equivalente), altere a linha que diz "

rotate 10

(seu número pode ser diferente) para um número maior. Isso diz para manter muitos dias de logs. Você pode fazer o 36500, que duraria 100 anos.

jedberg
fonte
6
Quando eu fiz isso em um raspberry pi (raspian), ele congelou todas as noites. Uma vez, tentei executar processos e abrir arquivos usando o console serial e descobri que ele tenta renomear 100000 de arquivos inexistentes. Então, cuidado com isso. Infelizmente eu não tenho informações mais detalhadas
Christian
0

Eu tenho procurado por isso para fazer a rotação dos backups do meu banco de dados diariamente, semanalmente e mensalmente; então eu giro o arquivo diariamente, mas o mantenho para fazer a rotação semanal e o mesmo para a rotação anual.

Use a opção de cópia. Do manual:

copy

copiar Faça uma cópia do arquivo de log, mas não altere o original. Essa opção pode ser usada, por exemplo, para fazer uma captura instantânea do arquivo de log atual ou quando algum outro utilitário precisar truncar ou analisar o arquivo. Quando essa opção é usada, a opção de criação não terá efeito, pois o arquivo de log antigo permanece no local.

Feida Kila
fonte
É o mesmo que o comentário abaixo ( serverfault.com/a/50186/275485 ) e não fornece uma resposta correta; cópia não significa que seus arquivos antigos que foram girados não são excluídos ..
Rudolf Mayer
-3

Deixando de lado o ponto em que a rotação envolve exclusão ... ;-)

Parece que você pode simplesmente adicionar a palavra 'copiar' ao arquivo apropriado (provavelmente em /etc/logrotate.d). Por exemplo, um script de logrotate do apache2 ficaria assim:

/var/log/apache2/*.log {
    semanal
    missingok
    rodar 52
    comprimir
    delaycompress
    notifempty
    cópia de
    sharedscripts
    postrotado
        if [-f "`. / etc / apache2 / envvars; echo $ {APACHE_PID_FILE: - / var / run / apache2.pid} `"]; então
            /etc/init.d/apache2 reload> / dev / null
        fi
    final
}

Tente isso e veja se faz o que você deseja.

Justin Ellison
fonte
2
Assumindo que ele deseja que os arquivos sejam "rotacionados", mas nunca excluindo os arquivos antigos, isso não será suficiente. Adicionar "cópia" à sub-rotina de configuração significa que o arquivo original continuará a crescer para sempre, mas eventualmente as cópias mais antigas do arquivo serão excluídas. Pelo que entendi, "copiar" é útil principalmente quando você espera que outro processo trunque / exclua o original.
Insyte 5/08/09
Exatamente, era o que eu pensava que ele estava pedindo. Ele pediu especificamente uma maneira de "não excluir meus arquivos de log", não uma maneira de "não excluir arquivos antigos dos meus arquivos de log". Acho que eu deveria ser mais cauteloso em questões que envolvem apenas um assunto e nenhum corpo ;-)
Justin Ellison
2
A frase "depois da rotação" fornece uma pista.
Pausado até novo aviso.
4
"Pondo de lado o ponto em que rotação envolve exclusão ..." Não necessariamente. A rotação pode envolver apenas a compactação dos logs antigos e mantê-los, o que parece ser a pergunta.
reflexiv