Я использую logrotate для ротации журналов доступа/ошибок пушки.
{
su root root
missingok
compress
dateext
dateformat .%Y%m%d
notifempty
sharedscripts
postrotate
# Send USR1 signal to the gunicorn master, which will cause it to reopen log files.
# http://docs.gunicorn.org/en/latest/deploy.html#logging
/bin/kill -USR1 $(cat /var/run/xxxx/api.pid 2>/dev/null) 2> /dev/null || true
endscript
}
Журналы правильно чередуются и сжимаются, и создается новый файл журнала. однако gunicorn не освобождает указатель на удаленный файл журнала и продолжает запись в этот файл журнала. из-за этого не освобождается файловое пространство на диске и теряются строки лога.
я вижу записи с помощью lsof
gunicorn 22284 root 9w REG 252,1 43263609 0 117968 /usr/cachelogic/log/gunicorn_unapi_access.log-20190410 (deleted)
если я перезапускаю службу gunicorn, файловое пространство освобождается, и процесс также записывает журналы в новый файл. но старые журналы, которые были записаны в удаленный файл, теряются.
Я хотел бы решить проблему с logrotate без перезапуска службы. Как убедиться, что журналы записываются в новый файл журнала, а не в файл с ротацией журналов, и освобождается место на диске.