当前位置: 首页 > news >正文

nginx按日切割日志

  Nginx 默认不会自动分割日志,所以日志都写在一个文件里,时间久了就会变得非常庞大,不便于管理。要实现 Nginx “每天生成日志”,最主流、最推荐的方法是使用 Linux 系统自带的 logrotate 工具这个方案稳定且自动,不用你写复杂的脚本。下面是核心配置步骤:

一、核心解决方案:使用 logrotate 工具

这是最标准、维护成本最低的方案,也是绝大多数 Linux 生产环境的选择

1. 创建或编辑配置文件

通常,我们为 Nginx 单独创建一个配置文件。使用你喜欢的编辑器(如 vim)打开以下文件:

sudo vim /etc/logrotate.d/nginx

2. 添加配置内容

将以下配置内容复制进去。这是一个通用的配置模板,已包含详细说明

/var/log/nginx/*.log {daily          # 每天切割一次rotate 30      # 保留30天的日志(30份)dateext         # 使用日期作为后缀(关键!)dateformat -%Y%m%d       # 日期格式(可选,默认是 -YYYYMMDD)compress       # 开启压缩,节省磁盘空间delaycompress  # 延迟压缩,保留最近一份未压缩的日志便于即时查看missingok      # 日志文件找不到时忽略错误notifempty     # 日志为空则不切割create 0640 nginx nginx  # 创建新日志文件,并设置权限和属主(用户需改为你实际的Nginx运行用户)sharedscripts  # 所有日志处理完后,只执行一次下面的脚本postrotate# 发送USR1信号给Nginx主进程,让它重新打开日志文件(关键步骤,不会中断服务)if [ -f /var/run/nginx.pid ]; thenkill -USR1 `cat /var/run/nginx.pid`fiendscript
}

  解释说明:1、“/var/log/nginx/*.log”这个需要替换为对应nginx所在目录位置与日志文件,*.log表示以.log结尾的文件均做切割。

       2、“/var/run/nginx.pid”这个需要替换为对应nginx进程文件。

                         3、核心信号:kill -USR1 这条命令是核心,作用是让 Nginx 优雅地关闭旧日志文件并创建新的开始写入,整个过程服务不会中断。

                         4、用户权限:如果服务器上 Nginx 运行用户不是 nginx(比如是 www-data),记得把 create 行里的 nginx nginx 改成对应的用户名和组名。

3. 检查和测试

在配置生效前,建议先测试一下确保配置没有问题。

 

  • 测试(Debug)模式:该命令会模拟运行,告诉你它会做什么,但不实际执行。

 

sudo logrotate -d /etc/logrotate.d/nginx
  •   强制执行:如果你想立即看效果,可以强制运行一次。
sudo logrotate -f /etc/logrotate.d/nginx

  

  • 执行后,你可以去 /var/log/nginx/ 目录下查看,应该会看到旧的日志被重命名为类似 access.log-20260509.gz 的文件,并且新的 access.log 文件已经生成。

4. 自动化

不用担心,logrotate 安装后会由系统的 cron 定时任务(通常在 /etc/cron.daily/)每天自动调用一次,无需你再做任何额外配置


二、备选方案:自定义脚本 + Crontab

如果你希望对日志有更精细的控制(比如需要特殊命名规则),可以自己写 Shell 脚本,并通过 crontab 定时执行

  • 脚本示例 (/usr/local/bin/cut_nginx_log.sh):

#!/bin/bash
LOGS_PATH="/var/log/nginx"
TODAY=$(date -d "yesterday" +%Y%m%d) # 脚本在凌晨执行,处理昨天的日志# 移动并重命名日志文件
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access-${TODAY}.log
mv ${LOGS_PATH}/error.log ${LOGS_PATH}/error-${TODAY}.log# 通知Nginx重新打开日志文件
kill -USR1 $(cat /var/run/nginx.pid)
  • 添加定时任务:通过 crontab -e 命令添加一条定时任务,让脚本每天凌晨 0 点执行
0 0 * * * /bin/bash /usr/local/bin/cut_nginx_log.sh
  •   优缺点对比:这种方案虽然更灵活,但需要自己维护脚本和定时任务的可靠性。对于大多数场景,logrotate 是更省心的选择。

三、总结建议

 
方案优点缺点推荐场景
logrotate 系统自带、配置简单、自动化、稳定可靠 灵活性相对较低 所有通用场景,强烈推荐
自定义脚本 高度灵活,可完全自定义命名和行为 需手动维护脚本和定时任务,有出错可能 有复杂定制需求的特殊场景

对于“每天生成日志”这个需求,直接使用 logrotate 即可一劳永逸地解决问题。

http://www.jsqmd.com/news/808393/

相关文章:

  • ExifToolGUI终极指南:5分钟掌握照片元数据批量管理
  • AI Agent配置安全实践:用Config-Guard为自动化变更加锁
  • RT-Thread串口高效数据接收实战:中断与DMA模式深度解析
  • Linux实战——John the Ripper部署与排错指南
  • 2026年山东酒店袋泡茶OEM代加工源头厂家对比指南|洪壶农业官方供应链方案 - 精选优质企业推荐官
  • 凰标:让草根创作不再被资本随意定义@凤凰标志
  • 2025届毕业生推荐的六大AI写作助手解析与推荐
  • PG302 QDMA Subsystem for PCI Express v4.0 Ch.2 架构解析:从队列模型到高性能数据传输
  • Python还是Java?小白程序员必备!收藏这份6个月大模型应用开发学习路线图(附实战项目)
  • 江苏庭院设计公司哪家专业? - 中媒介
  • 微信立减金回收5条指南 - 购物卡回收找京尔回收
  • FABRK全栈框架:模块化设计与AI辅助开发实战解析
  • AutoJs6深度解析:Android自动化脚本引擎架构剖析与实战指南
  • 别墅花园设计施工哪家效果好? - 中媒介
  • 告别内存焦虑!用Windows任务计划+Kettle脚本实现后台定时跑数(附完整.bat脚本)
  • Arccos Golf数据获取与Python分析实战:开源工具包逆向工程API
  • Adobe-GenP 3.0:智能破解Adobe Creative Cloud的完整实用指南
  • 2026桂林背景墙设计安装全攻略:别墅豪宅、农村自建房一站式解决方案 - 优质企业观察收录
  • 如何使用Android Sunflower应用掌握Jetpack Compose:完整开发指南
  • 符合国标 GB/T 31214.2 的钢丸,喷砂除锈效率提升秘诀 - 深度智识库
  • 阿拉善盟CMA甲醛检测治理及公共卫生检测报告地址联系方式集合(2026版) - 张诗林资源库
  • 深度学习进阶:CNTK自定义学习率调度器完全指南
  • 【湖南师范大学主办 | ACM出版,检索快且稳定 | 往届均已见刊并完成EI、Scopus检索】第三届智慧教育与计算机技术国际学术会议 (IECT 2026)暨十三届第四期“麓峰”交叉科学论坛
  • 坐标注意力:让移动网络“看见”位置与通道的协同奥秘
  • 别再只盯着3200MHz了!手把手教你算清DDR4内存的真实带宽(附2133/2400/3200对比)
  • 安徽酱卤鸡翅哪家入味? - 中媒介
  • 苏州黄金回收怕被坑?福正美实测六家机构避坑指南 - 福正美黄金回收
  • 终极Obsidian模板指南:如何构建可扩展的知识操作系统
  • 黄金闲置怎么处理?2026西安回收机构实测对比 - 福正美黄金回收
  • 3分钟学会STL转STEP:告别网格限制,开启CAD设计新篇章