gpt4 book ai didi

python - Gunicorn 在 logrotate 后坚持旧日志

转载 作者:太空宇宙 更新时间:2023-11-03 15:13:09 40 4
gpt4 key购买 nike

我正在使用 logrotated 来轮换 gunicorn 访问日志。这是我的 logrotated 配置

/opt/api/log/access.log {
daily
rotate 10
missingok
notifempty
compress
sharedscripts
postrotate
killall -s USR1 gunicorn
endscript
}

日志被正确轮换、压缩,并创建了一个新的 access.log。但是,gunicorn 不会释放指向旧日志文件的“指针”,因此轮换实际上不会释放磁盘空间。

我仍然可以使用 lsof 查看它的条目

如果我执行 initctl restart api ,gunicorn 将重新启动并且磁盘空间最终被释放。

如何以比重启服务更干净的方式释放磁盘空间?

最佳答案

通常 Linux 进程接受一个特殊的 signal通知他们日志文件轮换。在这种情况下,您将信号 SIGUSR1 发送到以处理系统上的所有 gunicorn 进程。

问题是

  • 你运行的系统中是否存在这样的进程

  • gunicorn 进程是否接受 SIGUSR1 信号

根据 gunicorn 源代码 USR1 确实应该轮换日志

...所以我怀疑 killall 没有将命令发送到正确的进程。

要找出这一点,请使用 ps 检查您的进程列表。如果您发现 gunicorn 进程,请修改 workers/base.py 以打印日志条目以查看它们是否收到信号。尝试手动发送信号,如果它有效,那么它是 logrotate 配置,但不知何故不起作用。

关于python - Gunicorn 在 logrotate 后坚持旧日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24146006/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com