nginx之使用 logrotate 容器化 nginx 日志轮换

over140 阅读:27 2025-01-19 22:14:33 评论:0

Nginx 没有原生的日志轮换,所以需要一个外部工具,比如 logrotate。 Nginx 提出了一个挑战,因为日志必须在轮换后重新打开。如果 pid 在/var/run 中可用,您可以向它发送 USR1 信号。

但是在 docker 容器中运行时,/var/run 中缺少 pid 文件(并且 pid 实际上属于主机,因为它在技术上是一个主机进程)。

如果您不重新打开日志,则 nginx 根本不会记录任何内容,尽管它会继续作为 Web 服务器、反向代理等运行。

请您参考如下方法:

您可以使用 docker inspect 从 Pid 属性中获取进程 ID,并使用 kill -USR1 {pid} 让 nginx 重新打开日志。

这是我创建的/etc/logrotate.d/nginx 文件:

/var/log/nginx/access.log 
{ 
    size 2M 
    rotate 10 
    missingok 
    notifempty 
    compress 
    delaycompress 
    postrotate 
        docker inspect -f '{{ .State.Pid }}' nginx | xargs kill -USR1 
    endscript 
} 


标签:nginx
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号