Estou escrevendo um software e quero recarregar os arquivos de log quando o processo obtiver um SIGHUP de algo como logrotate. A questão é: quanto tempo o aplicativo pode usar antes que o logrotate comece a compactar o arquivo de log girado?
A página de manual e todas as referências que encontrei apenas afirmam que a aplicação deve recarregar os logs "imediatamente", mas não diz se isso deve ser feito em 1ms ou 1 segundo, por exemplo.
Responder1
Para estar seguro: nenhum.
Logrotate assume que assim que o comando postrotate for concluído, o arquivo de log não será mais gravado. Existem duas maneiras de lidar com "o fechamento de arquivos de log pode demorar um pouco":
- A opção do logrotate
delaycompress
adia a etapa de compactação até opróximoinvocação de logrotate. Dessa forma, pode levar o tempo que for necessário para a próxima execução do logrotate (embora fazer isso seja uma péssima ideia). - Você pode escrever uma ferramenta de linha de comando que diga ao daemon para fechar e reabrir o arquivo de log e certificar-se de que este comando o faça.nãosaia até que o daemon confirme que todos os arquivos de log foram fechados (não é necessário esperar até que eles sejam reabertos também, embora isso não faça mal). As pessoas podem então usar esta ferramenta de linha de comando nas estrofes do logrotate
postrotate
.