Quando um aplicativo abre um arquivo, continue a escrevê-lo mesmo se ele for movido. Portanto, se você quiser ter certeza de não perder informações, você deve enviar um sinal para o aplicativo, para liberar recursos.
Você pode tentar esta configuração:
/var/my-app-data/logs/general.log {
missingok
notifempty
size 20M
rotate 4
create mode owner group
sharedscripts
postrotate
nginx command to do graceful restart
endscript
}
Este arquivo general.log
é girado sempre que crescer em 20M
em tamanho, depois de passar por 4
rotações, o arquivo é removido.
O sharedscripts
significa que o script postrotate
será executado apenas uma vez, não uma vez para cada log que é rotacionado.
De acordo com o logrotate manual:
create mode owner group
Immediately after rotation (before the postrotate script is run)
the log file is created (with the same name as the log file just
rotated). mode specifies the mode for the log file in octal
(the same as chmod(2)), owner specifies the user name who will
own the log file, and group specifies the group the log file
will belong to.
Então, no seu caso:
- girar arquivo
- remove general.log.5 se existir
- crie general.log com atributo e propriedade próprios
- executa o script postrotate
Seu aplicativo continuará a escrever general.log.1 até que o arquivo seja fechado ou postscript
seja executado e nginx execute uma reinicialização normal.
Se o seu aplicativo sempre fechar o arquivo de log via fclose($fp)
ou usar file_put_contents
, você deverá omitir nginx
reinicialização normal.