Tudo isso me inspirou a entrar na página do logrotate para ver que tipo de ferramentas estão à minha disposição. Descobri que copytruncate
faz uma cópia do arquivo de log e, em seguida, o trunca, mas sem interromper o processo que grava nele. Meu teste mostra que ele gira os logs e permite que o tcpdump continue gravando no arquivo limpo. Eu deixei um cronjob de hora em hora rodando durante a noite usando um arquivo de configuração de teste, então eu rodaria esses logs a cada hora. Funcionou:
# Opensips SIP traces
/var/log/sip.log
{
rotate 31
daily
missingok
notifempty
compress
delaycompress
sharedscripts
copytruncate
}
Uma possível desvantagem é que, se o processo tcpdump for eliminado por alguém que não saiba o que estou fazendo, precisarei entrar e reiniciar o processo manualmente, mas isso é suficiente por enquanto.
O outro problema potencial é que, se o arquivo de log é muito grande, fazer uma cópia pode exigir muito espaço em disco, para o qual eu tenho muito no momento, mas o processo pode ser interrompido se não houver espaço suficiente para fazer uma cópia.