Eu tenho um arquivo de log extremamente ocupado (vamos chamá-lo de /var/log/service.log
) que também é frequentemente pesquisado por razões de solução de problemas. Saída para ele é quase contínua e 24/7. Provavelmente coloca em torno de 1-2 GB / dia, mas precisamos de tudo isso.
Como fgrep
de um arquivo de log grande é impraticavelmente lento, é necessário girar com frequência. Eu tenho logrotate
definido para ser executado em /etc/cron.hourly
, com uma diretiva hourly
e um limite de tamanho de 512M
ou mais.
Isso funciona como esperado: o arquivo é girado de /var/log/service.log
para /var/log/service.log-20150810
ou o que você tem. O problema é que a renomeação é apenas uma mudança estética na entrada inode / directory, assim rsyslogd
continua escrevendo para /var/log/service.log-20150810
agora e por algum tempo, enquanto o recém criado /var/log/service.log
fica vazio. Em algum momento, rsyslogd
decide começar a escrever para o novo, mas não tenho clareza sobre sua rima ou razão para fazê-lo.
De qualquer forma, o que eu preciso é alguma maneira de "chutar" o rsyslogd
para dizer a ele para começar a escrever para um novo e puro /var/log/service.log
após a rotação do log. Enviando SIGHUP não parece fazer o truque. Quaisquer idéias que não envolvam potencialmente perder muitas entradas de log (ou seja, reiniciar rsyslogd
) serão apreciadas!
(Nota: Percebi que o esquema de nomenclatura logrotate
levaria a /var/log/service.log.1
e outras coisas, por isso estou um pouco perplexo ao ver /var/log/service.log-20150810
ao lado dele. Será que rsyslogd
faz sua própria rotação internamente? também existem algumas implicações adversas para isso?)
Muito obrigado antecipadamente!