Ротация логов nginx без потери строк
Nginx держит файл лога открытым. Если logrotate просто переименует access.log, nginx продолжит писать в переименованный файл, а новый так и останется пустым.
Чтобы nginx переоткрыл логи, ему нужно отправить сигнал USR1. Перезапуск для этого не нужен, соединения не рвутся.
Конфигурация
Файл /etc/logrotate.d/nginx:
/var/log/nginx/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -s /run/nginx.pid ] && kill -USR1 $(cat /run/nginx.pid)
endscript
}
delaycompress оставляет вчерашний лог несжатым: nginx может дописать в него последние строки, пока обрабатывает сигнал.
Проверка
logrotate -d /etc/logrotate.d/nginx logrotate -f /etc/logrotate.d/nginx ls -l /var/log/nginx/
После принудительного запуска новый access.log должен начать расти сразу, а не после перезапуска сервиса.