Arquivo de log [RESOLVIDO]

1. Arquivo de log [RESOLVIDO]

Eduardo Rodrigues
madrux

(usa Ubuntu)

Enviado em 02/05/2013 - 16:44h

Boa tarde pessoal,

tenho um script que inicializa um aplicativo e que para gerar o arquivo de log do aplicativo utilizo um método parecido com o descrito abaixo:

DATE=`/bin/date +%Y%m%d`
/opt/programa/bin/start >> /opt/programa/logs/$DATE.log 2>&1 </dev/null&


Mas me deparei com o seguinte problema, enquanto o aplicativo não for reinicializado o arquivo de log será sempre o mesmo e irá ficar imenso. Gostaria de gerar um arquivo de log por dia. Alguém pode me ajudar nessa dúvida?


Muito obrigado pela ajuda


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 02/05/2013 - 19:27h

Se o programa reabrisse o log automaticamente mediante alguma forma de interação, o logrotate possivelmente seria a reposta definitiva ao problema. Mas, pelo que você mostrou, você está redirecionando, atrvés do shell, uma saída que seria jogada para o terminal.

Se o programa não lhe oferecer um mecanismo de log interno que funcione melhor do que esse redirecionamento manual, eu vejo três soluções imediadas, cada uma com suas desvantagens.

1) Reiniciar a aplicação periodicamente, gerando a saída para arquivos com timestamps distintos. O problema disso é que parar e reiniciar a aplicação causará downtime e possível interrupção de operações em andamento, o que pode ser inaceitável.

2) Redirecionar a saída para um pipe, e ter como receptor desse pipe um programa que rotacione periodicamente o arquivo de saída ou que aceite uma forma de comunicação que permita rotacionar os arquivos assincronamente. A desavantagem é que se o processo com o receptor capotar por algum motivo, não será possível recuperar a saída do pipe com algum outro processo, e pode ser que a aplciação, ao tentar escrever no pipe que não tem mais um recpetor, pode receber um SIGPIPE, que, se não for ignorado, a fará capotar.

3) Redirecionar o log para um FIFO (named pipe), e ter um outro processo lendo desse fifo e se encarregando de encaminhar os logs para arquivos que podem ser, como no caso anterior, rotacionados periódicamente ou assíncronamente. Também como no caso anterior, se o processo que lê o FIFO cair e o transmissor tentar escrever, o transmissor pode tomar um SIGPIPE e morrer. A vantagem, porém, é que é possível reconectar-se ao FIFO como receptor se o receptor original cair, de modo que, se a queda for curta, pode ser que o transmissor nem mesmo a perceba. Além disso, dependendo da aplicação, ela pode ignorar o SIGPIPE (ou você pode fazer com que o shell o ignore antes de disparar a aplicação), mas deve saber que as mensagens de log que eventualmente forem escritas enquanto o receptor estiver caído vão se perder, mesmo que o transmissor não chegue a cair.

Numa máquina normal, é óbvio que nem o transmissor nem o receptor deveriam cair, de modo que as soluções (2) e (3) deveriam lhe atender.

3. Re: Arquivo de log [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 02/05/2013 - 17:00h

Pesquise por Logrotate.


4. Re: Arquivo de log [RESOLVIDO]

Eduardo Rodrigues
madrux

(usa Ubuntu)

Enviado em 03/05/2013 - 12:13h

Pessoal obrigado pela ajuda, mas acabei optando pelo cronolog e adicionei o mesmo ao meu script da seguinte maneira:


pgpool -d -n 2>&1 | /usr/local/sbin/cronolog --hardlink=/opt/programa/logs/programa.log '/opt/programa/logs/%Y-%m-%d-programa.log' &


5. Re: Arquivo de log [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 03/05/2013 - 13:08h

Não entendi o "obrigado... mas". O que você fez foi usar exatamente a minha segunda sugestão.

Eu não conhecia esse cronolog, mas ele faz quase exatamente o que eu sugeri (falta a opção de rotacionar imediatamente mediante algum evento assíncrono). E ele também padece dos mesmos problemas que eu apontei: se ele cair, pode derrubar a aplicação que está gerando os logs. Fique atento a isso.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts