Alguém já teve problemas com o logrotate antes que faz com que um arquivo de log seja rotacionado e depois volte ao mesmo tamanho que era originalmente? Aqui estão minhas descobertas:
Script de logrotação:
/var/log/mylogfile.log { rodar 7 diariamente comprimir olddir / log_archives missingok notifempty copytruncate }
Saída detalhada do logrotate:
copiando /var/log/mylogfile.log para /log_archives/mylogfile.log.1 truncando /var/log/mylogfile.log compactando log com: / bin / gzip removendo o log antigo /log_archives/mylogfile.log.8.gz
Arquivo de log após a truncagem
[root @ server ~] # ls -lh /var/log/mylogfile.log -rw-rw-r-- 1 parte1 parte1 0 11 de janeiro 17:32 /var/log/mylogfile.log
Literalmente segundos depois:
[root @ server ~] # ls -lh /var/log/mylogfile.log -rw-rw-r-- 1 parte1 parte1 3.5G 11 de janeiro 17:32 /var/log/mylogfile.log
Versão RHEL:
[root @ server ~] # cat / etc / redhat-release Red Hat Enterprise Linux ES versão 4 (Nahant Update 4)
Versão do logrotate:
[raiz @ DAA21529WWW370 ~] # rpm -qa | grep logrotate logrotate-3.7.1-10.RHEL4
Algumas notas:
- O serviço não pode ser reiniciado em tempo real; é por isso que estou usando copytruncate
- Os logs estão girando todas as noites, de acordo com o
olddir
diretório que contém arquivos de log a cada noite.
Estou extremamente confiante de que a Kjetil conseguiu. Drew, você ainda não está convencido com a explicação dele, mas peço que leia com atenção o que ele disse.
Se você aceitar, a correção é parar e reiniciar o aplicativo quando os logs são girados ou usar uma ferramenta como os "rotatelogs" do apache, onde você alimenta a saída do log para a ferramenta por meio de um cano, e a ferramenta cuida de girando o arquivo de log de vez em quando. Por exemplo, uma das minhas instâncias do apache registra com
o que causa muitos arquivos de log com nomes como
aparecer sem reiniciar o apache; Eu posso então comprimi-los manualmente após o fato. Observe como a rotação é feita toda semana, ou seja, a cada 604800 segundos, sendo esse o argumento passado
rotatelogs
.Se você não pode parar e reiniciar o aplicativo, e ele não pode logar através de um canal, acho que você tem um problema real. Talvez outros tenham sugestões.
fonte
seria ótimo se você pudesse enviar o logrotate inteiro.
Por que tentar usar kill -HUP? (Recarregamento clássico não reiniciando ).
Além disso ... verifique com
lsof
quem está acessando o arquivo.fonte
kill -HUP
pois esse aplicativo não pode ser tocado de forma alguma - é um aplicativo confidencial que não possuo (nem o gerencio - apenas gerencio o lado do sistema operacional); portanto, preciso fazer as logotações dessa maneira caminho./etc/cron.daily
. Pergunta para todos: Existe algo que o script logrotate faz de maneira diferente da execução manual do logrotate? Meu script logrotate parece literalmente/usr/sbin/logrotate /etc/logrotate.conf
. Isso é bastante desconcertante.Basta usar ">>", que significa anexar em vez de ">", o que significa criar a partir de seus scripts que gravam neste arquivo. Eu tive exatamente o mesmo problema e o corrigi usando o acréscimo no meu script.
SomeScript.sh >> output.txt
Espero que seja mais claro.
fonte
>
um script. Além disso, essa resposta é confusa porque há uma grande diferença entre>
e>(
)
nos scripts. Finalmente, se o código que estiver escrevendo for atualizado, seria muito melhor que ele simplesmente comece a gravar no novo arquivo de log depois delogrotate
fazer o seu trabalho.