docker部署nginx下日志自动切割方法
前言:nginx采用docker部署,简单方便,但出现一个问题,就是日志没有自动切割,导致access.log 无限增大。如果非docker安装,则nginx的日志默认有切割的,那docker为何没有呢,最后发现,nginx容器里面没有 logrotate 服务(logrotate: command not found)
服务器环境:centos 7
nginx的docker运行命令:
docker run -d --name nginx --restart always --net host -v /opt/common/nginx/nginx.conf:/etc/nginx/nginx.conf -v /opt/common/nginx/html:/usr/share/nginx/html -v /opt/common/nginx/logs:/var/log/nginx -v /opt/common/nginx/conf.d:/etc/nginx/conf.d -e TZ="Asia/Shanghai" nginx:1.24.0
其中服务器本地日志映射目录是 /opt/common/nginx/logs
以下搜集了几种日志切割方式:
- 1 nginx配置map日期
- 2 脚本切割
- 3 配置 logrotate
1 nginx配置map日期
在 nginx/conf.d 目录下,新建 logdate.conf 文件(nginx重启会自动加载的)
内容是:
map $time_iso8601 $logdate {default 'date-not-found';'~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd;
}
然后在 nginx.conf 的日志配置如下:
access_log /var/log/nginx/access-$logdate.log main;
原来的默认配置是:
access_log /var/log/nginx/access.log main;
这时到了第二天就会自动生成新的log文件
注意:映射出来的存log的文件夹logs需要配一下权限,因为nginx要创建文件需要权限
例如:赋给nginx权限
chown -R nginx:nginx logs
生成之后,文件长这样:

该方法是按每天归整,缺点是每次打日志会走map一次日期,会牺牲一点点性能,此外,定期清理日志,需要再额外写个清理脚本(只保留N天,腾出存储空间),切割日志目的之一就是为了方便清理日志
2 脚本切割
该方法是写个脚本,定时凌晨12点将日志切割归档,这个方法相对比较简单
#!/bin/bash
LOGS_PATH=$1
DAYS=$2
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
#按天切割日志
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
#向 Nginx 主进程发送 USR1 信号,重新打开日志文件,否则会继续往mv后的文件写内容,导致切割失败.
kill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'`
#删除配置的N天前的日志
cd ${LOGS_PATH}
find . -mtime +${DAYS} -name "*20[1-9][3-9]*" | xargs rm -f
exit 0
将该脚本保存到 cut_nginx_log.sh,找个地方放,例如放在
/opt/common/nginx/logs/cut_nginx_log.sh
给该文件增加执行权限:
chmod +x /opt/common/nginx/logs/cut_nginx_log.sh
然后编辑定时任务:
crontab -e
编辑写入:
01 00 * * * /opt/common/nginx/logs/cut_nginx_log.sh /opt/common/nginx/logs/ 120
这个定时任务是,每天凌晨01秒,开始执行该脚本,脚本第一个参数 /opt/common/nginx/logs/ 表示日志的目录,第二个参数120表示日志保留120天,即清理120天之前的日志
这个方法是切割与定期清理一起,比较简单方便
3 配置 logrotate
既然nginx容器里面的 logrotate 服务不可用,那么就利用docker宿主机的 logrotate 服务,这个服务是 centos7 默认安装的,即利用服务器本地的 logrotate。
将以下脚本保存在 /etc/logrotate.d/nginx (vi /etc/logrotate.d/nginx,然后将以下脚本复制进去)
/opt/common/nginx/logs/*.log {dailymissingokrotate 52compressdelaycompressnotifemptycreate 640 nginx admsharedscriptspostrotatekill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'`endscript
}
然后添加定时任务:
echo “59 23 * * * /usr/sbin/logrotate -f /etc/logrotate.d/nginx >/dev/null 2>&1” > /etc/crontab
或者执行 crontab -e ,然后将以下编辑写入
59 23 * * * /usr/sbin/logrotate -f /etc/logrotate.d/nginx >/dev/null 2>&1
这个定时任务是,每天23:59 开始切割,并做压缩
结果是:

此外,error.log 也会切割,其中脚本具体参数意义在此不做详述
最后总结:
以上三种,脚本方式是比较简单,可根据情况进行配置,选其一即可
相关文章:
docker部署nginx下日志自动切割方法
前言:nginx采用docker部署,简单方便,但出现一个问题,就是日志没有自动切割,导致access.log 无限增大。如果非docker安装,则nginx的日志默认有切割的,那docker为何没有呢,最后发现&am…...
3D目标检测实战 | 图解KITTI数据集与数据格式
目录 1 数据集简介2 传感器坐标系3 数据集下载与组织4 数据内容说明4.1 矫正文件calib4.2 图像文件image4.3 点云文件velodyne4.4 标签文件label4.5 平面文件plane 1 数据集简介 KITTI数据集是一个广泛应用于自动驾驶和计算机视觉领域的公开数据集。该数据集由德国卡尔斯鲁厄理…...
周界警戒AI算法+视频智能分析在安全生产场景中的应用
长期以来,周界防范安防系统在大型园区、工厂、社区、机场、火车站站台、重点单位等领域应用较为广泛和常见。随着AI人工智能等新兴技术的快速发展与落地应用,通过AI智能检测与视频智能分析技术,现代化的周界安防系统可以做到全天候快速、准确…...
C++中执行shell命令,popen与system的区别
C中执行shell命令,popen与system的区别_c popen_Op_chaos的博客-CSDN博客 2.system system()函数执行过程: 1.fork一个子进程; 2.在子进程中调用exec函数去执行command; 3.在父进程中调用wait去等待子进程结束。 由于system没…...
Flink相关
墨滴社区 用 Flink 取代 Spark Streaming!知乎实时数仓架构演进_天池技术圈-阿里云天池 关于flink实时数仓的实际问题_flink datastream 按天,小时写入hdfs_一个写湿的程序猿的博客-CSDN博客 基于 Flink Hudi 的实时数仓在 Shopee 的实践 - 墨天轮...
数据结构题型9-顺序栈
#include <iostream> //引入头文件 using namespace std;typedef int Elemtype;#define Maxsize 10 #define ERROR 0 #define OK 1typedef struct {Elemtype data[Maxsize];int top; }SqStack;void InitStack(SqStack& S) {S.top -1; } bool StackEmpty(SqStack…...
时间复杂度、空间复杂度
一、时间复杂度 1、概念 时间复杂度:计算的是当一个问题量级增加的时间,时间增长的趋势; O(大O表示法):渐进的时间复杂度 2、举例 ① 以下 for 循环的时间复杂度:O(1 3n) O(n) 去掉常数…...
C++---多态
多态 前言多态的概念多态的定义及实现多态的构成条件虚函数虚函数的重写虚函数重写的两个例外协变(基类与派生类虚函数返回值类型不同)析构函数的重写 override和final 虚函数的默认参数 抽象基类 前言 在买火车票的时候,如果你是学生,是买半价票&#…...
Android 滑动事件消费监控,Debug 环境下通用思路
Android Debug 环境下滑动事件消费监控通用思路 背景 Android 开发中,经常会遇到滑动事件冲突。在一些简单的场景下,我们如果能够知道是那个 View 拦截了事件,那我们能够很容易得解决。解决方法通常就是内部拦截法或者外部拦截法。ViewPage…...
Unity中Shader用到的向量的乘积
文章目录 前言一、向量的乘法1、点积2、差积 二、点积(结果是一个标量)1、数学表示法2、几何表示法 三、叉积1、向量叉积的结果 与 两个相乘的向量互相垂直2、判断结果正负方向的方法:右手法则 前言 Unity中Shader用到的向量的点积 一、向量…...
帆软FineReport决策报表之页面布局
最近在用帆软决策报表绘制首页大屏,记录使用过程,方便查看。 版本:FineReport10.0 第一步、页面布局 页面布局其实就是组件的排列组合,决策报表主区域body有两种布局方式:自适应布局和绝对布局。 1)自适应…...
[Linux入门]---进程的概念
文章目录 1.进程的概念①描述进程-PCB②task_struct-PCB的一种③task_ struct内容分类 2.查看进程3.通过系统调用获取进程表示符4.通过系统调用创建进程---fork初识 1.进程的概念 在我们的电脑开机的时候,操作系统会被加载到内存中,点击多个应用进行时&a…...
Leetcode—— 20.有效的括号
20. 有效的括号 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭…...
视频播放器的技术组成
Qt视频播放器实现(目录) 什么是视频 我们这里讲的视频,通常也包括了音频。因为没有声音的画面播放几乎是不可接受的。 这样暗含了一个事实,那就是视频总是包括视频数据和音频数据两部分。 Video 表示视频; Audio …...
Stable Diffusion 系统教程 | 强大的ControlNet 控制网
2023年的2月13日,一款名叫ControlNet的插件横空出世,AI绘画变得更加可控 ControlNet直译过来很简单,就叫做控制网,开发者是一名华裔,毕业于苏州大学,目前在斯坦福做读博士一年级,大佬大佬&…...
Hadoop-sqoop
sqoop 1. Sqoop简介及原理 简介: Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysq1.postgresql..)间进行数据的传递,可以将一个关系型数据库(例如: MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop 的HDFS中&…...
[论文阅读]YOLOV1:You Only Look Once:Unified, Real-Time Object Detection
摘要 我们提出了YOLO,一种新的目标检测方法。之前的目标检测工作重新使用分类器来执行检测。相反,我们将目标检测表述为空间分离的边界框和相关类概率的回归问题。单个神经网络在一次评估中直接从完整图像中预测边界框和类别概率。由于整个检测管道是一…...
Ubuntu 20.04 安装MySQL 8.0.34
MySQL安装 sudo wget https://cdn.mysql.com/archives/mysql-8.0/mysql-server_8.0.31-1ubuntu20.04_amd64.deb-bundle.tar下载MySQL文件。 sudo mkdir /mysql8创建目录。 sudo tar -xf mysql-server_8.0.31-1ubuntu20.04_amd64.deb-bundle.tar -C /mysql8进行解压。 需…...
MySQL 高级语句 Part1(进阶查询语句+MySQL数据库函数+连接查询)
高级语句 第一部分 一、MySQL进阶查询语句1.1 select ----显示表格中一个或数个字段的所有数据记录1.2 distinct ----不显示重复的数据记录1.3 where ----有条件查询1.4 and or ----且 或1.5 in----显示已知的值的数据记录1.6 between----显示两个值范围内的数据记录1.7 通配符…...
Rust免杀 Shellcode加载与混淆2
前言 这是半年前我学习Rust和免杀时的一些记录,最近打开知识库看到了这篇半年前的笔记,并且发现我常逛的安全社区都比较少有人分享Rust以及Rust免杀的帖子,于是想着将这篇笔记分享出来供大家参考和指正。由于我写这篇文章时也刚刚开始接触Ru…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
