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
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
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 .