Log log rotativo de saída padrão

2

Eu tenho um programa que leva um argumento para permitir uma depuração extra de um hardware que usamos.

O registro é gravado apenas no padrão, então normalmente enviamos o padrão para um arquivo, por exemplo, ./myprog -AddDebug > myfile.txt, no entanto, agora somos obrigados a manter este registro ativado para encontrar uma falha que normalmente não fazemos, estamos procurando uma maneira de girar os logs para garantir que o espaço em disco dos servidores não seja usado.

Eu usei a função logrotate embutida no Linux adicionando um arquivo de configuração em /etc/logrotate.d/mytrace que contém o seguinte:

/home/myprog/mytrace.txt
{
    rotate 5
    size 2M
    copytruncate
    olddir trace_archive
}

Quando eu executo / usr / sbin / logrotate /etc/logrotate.conf o arquivo de rastreio é movido para o archvie, o original é recriado, mas obviamente o pipe é perdido, então o arquivo não é mais gravado. Eu tentei substituir create por copytruncate , o que ainda coloca o arquivo no arquivo, mas o arquivo original continua crescendo.

Um segundo problema, o arquivo só é arquivado quando eu executo manualmente a função logrotate, ele não é disparado automaticamente quando o tamanho do arquivo é atingido.

Qualquer ajuda que você puder fornecer em ambos os problemas será apreciada.

UPDATE

Consegui fazê-lo funcionar parcialmente, para que o copytruncate funcione, o arquivo precisa ser aberto no modo append, então, em vez de ./myprog -AddDebug > myfile.txt , isso deve ser alterado para ./myprog -AddDebug >> myfile.txt .

Meu único problema agora é que ele só fará a rotação se eu executar logrotate -v /etc/logrotate.conf , então como faço para que isso seja feito automaticamente?

Parece que eu teria que criar manualmente um cronjob que fosse executado a cada poucos minutos para garantir que o log fosse rotacionado e não fosse manipulado automaticamente.

Obrigado

    
por Boardy 05.02.2014 / 12:29

2 respostas

0

Obrigado a todos pela sua ajuda.

Eu usei a rotação de log padrão embutida no sistema operacional e configurei o cronjob para executar a cada 5 minutos, e isso parece estar funcionando da maneira que eu queria.

Obrigado

    
por 27.02.2014 / 10:26
2

Simplesmente canalize para | logger com sinalizadores apropriados e use o syslog para gerenciar seu arquivo de log.

Como alternativa, um bom programa auxiliar é rotatelogs incluído na distribuição apache httpd, que obtém stdin e grava e gira arquivos de log para você, por exemplo, canaliza sua saída para | /usr/sbin/rotatelogs /home/myprog/myproglog.%Y-%m-%d-%H_%M_%S 2M e cria arquivos de log de 2 megabytes com nomes de arquivos sequenciais exclusivos .

    
por 05.02.2014 / 13:05