Я использую logrotate для поворота журналов доступа / ошибок Gunicorn.
{
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 без перезапуска службы.Как убедиться, что журналы записываются в новый файл журнала, а не в файл журнала, и освобождается ли место на диске.