Do POV do rsyslog, o arquivo de log excluído ainda existe. Isso ocorre porque o rsyslog não está gravando no nome do arquivo, ele está gravando no identificador de arquivo que ele abriu para o arquivo de log.
Os sistemas Unix na verdade não excluem um arquivo até que não haja processos com identificadores abertos para o arquivo. Isso significa que o espaço em disco usado pelo arquivo excluído não é liberado até que todas e quaisquer alças de arquivo abertas sejam fechadas. Isso também significa que qualquer processo com identificadores de arquivos abertos para o arquivo excluído pode continuar lendo e / ou gravando no arquivo.
Enviar um sinal HUP (por exemplo, via pkill -HUP rsyslog
ou /etc/init.d/rsyslog rotate
) para o rsyslog diz para fechar todos os arquivos abertos, recarregar seu arquivo de configuração e reabrir todos os arquivos de log para gravação (criando-os se necessário).
Reiniciar o rsyslogd também funciona.
Observe que isso é um recurso, não um bug, com algumas implicações úteis - por exemplo, é por isso que o rsyslog continua gravando no mesmo arquivo de log mesmo após ter sido rotacionado (ou seja, renomeado / mv-ed) até que o rsyslog receba um sinal HUP. Isso significa que os scripts de processamento de registro & os utilitários não precisam ser escrupulosamente cuidadosos com o tempo - eles podem simplesmente rotacionar todos os logs, enviar ao rsyslog um HUP e tudo continua funcionando, sem perda de dados de log.
BTW, a única maneira de isso não acontecer com o rsyslog seria se ele fosse fechado e reaberto a cada arquivo de log a cada gravação (ou pelo menos chamado sync()
). O desempenho seria abismal.