惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
大猫的无限游戏
大猫的无限游戏
Apple Machine Learning Research
Apple Machine Learning Research
T
Tailwind CSS Blog
人人都是产品经理
人人都是产品经理
博客园 - Franky
阮一峰的网络日志
阮一峰的网络日志
腾讯CDC
小众软件
小众软件
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
WordPress大学
WordPress大学
博客园 - 叶小钗
博客园 - 司徒正美
博客园 - 三生石上(FineUI控件)
博客园 - 【当耐特】
有赞技术团队
有赞技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
Visual Studio Blog
J
Java Code Geeks
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
IT之家
IT之家
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
爱范儿
爱范儿
罗磊的独立博客
雷峰网
雷峰网
量子位
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Hugging Face - Blog
Hugging Face - Blog
Cyberwarzone
Cyberwarzone
G
GRAHAM CLULEY
宝玉的分享
宝玉的分享
P
Privacy International News Feed
S
Schneier on Security
W
WeLiveSecurity
H
Heimdal Security Blog
I
Intezer
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 聂微东
美团技术团队
N
News | PayPal Newsroom
T
The Exploit Database - CXSecurity.com
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
aimingoo的专栏
aimingoo的专栏
S
SegmentFault 最新的问题
Project Zero
Project Zero
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org

Hsu Yeung 的博客

三圣花市 | Hsu Yeung 的博客 网站支持 Live Photo 图片展示 | Hsu Yeung 的博客 梦 | Hsu Yeung 的博客 周末午餐 | Hsu Yeung 的博客 张家界 | Hsu Yeung 的博客 话剧《寻她芳踪·张爱玲》 | Hsu Yeung 的博客 博客自动生成文章目录 | Hsu Yeung 的博客 灭螂行动! | Hsu Yeung 的博客 张靓颖成都演唱会 | Hsu Yeung 的博客 最近对博客做的一些微调总结 | Hsu Yeung 的博客 Windows 上安装 Lua | Hsu Yeung 的博客 网站支持展示 B 站 iframe 视频 SpringBoot 中使用 RedisTemplate 存取整数值的坑 | Hsu Yeung 的博客 SQL JOIN 中 ON 与 WHERE 的区别 值得记录的一些工作近况 | Hsu Yeung 的博客 周传雄成都演唱会 | Hsu Yeung 的博客 并行操作导致获取数据库连接超时 | Hsu Yeung 的博客 风信子 | Hsu Yeung 的博客 Linux 安装并配置 Nginx | Hsu Yeung 的博客 郁金香土培结果 | Hsu Yeung 的博客 MySQL LEFT JOIN 右表有多条数据但只取最新的一条 | Hsu Yeung 的博客 获取数据库锁等待超时问题 | Hsu Yeung 的博客 从零开始挑选相机 | Hsu Yeung 的博客 郁金香 | Hsu Yeung 的博客 我的第一束花 | Hsu Yeung 的博客 快乐的一周 | Hsu Yeung 的博客 重庆,来了 | Hsu Yeung 的博客 散步 | Hsu Yeung 的博客 Git 工作区、暂存区、版本库之间的关系 | Hsu Yeung 的博客 Collectors.toMap() 操作 value 为 null 的情况 AOP 记录请求参数时序列化异常问题 | Hsu Yeung 的博客 第一次参加演唱会 | Hsu Yeung 的博客 MySQL FIND_IN_SET 函数的使用 | Hsu Yeung 的博客 自动拆箱机制导致编译失败 | Hsu Yeung 的博客 最近 | Hsu Yeung 的博客 夜爬龙泉山 | Hsu Yeung 的博客 在 Windows 上安装多个版本 JDK 并切换使用的版本 安装 Windows Terminal 和 gsudo 记录 意外的奖励 | Hsu Yeung 的博客 记第一次修热水器 | Hsu Yeung 的博客 在 Windows 电脑上调试 iPhone Safari 浏览器的网页 给网站加上 RSS | Hsu Yeung 的博客 打雷了 | Hsu Yeung 的博客 豉汁蒸排骨 | Hsu Yeung 的博客 我的 2022 年 | Hsu Yeung 的博客 如何使用 Git 给代码打 tag | Hsu Yeung 的博客 记一次有趣的上班经历 | Hsu Yeung 的博客 我记得 | Hsu Yeung 的博客 Spring 新增或修改请求 header 参数 | Hsu Yeung 的博客 Spring 事务传播机制 | Hsu Yeung 的博客 在家自制“周黑鸭” | Hsu Yeung 的博客 晚餐 | Hsu Yeung 的博客 如何解决逻辑删除与数据库唯一约束冲突 | Hsu Yeung 的博客 [转]漫画赏析:Linux 内核到底长啥样 | Hsu Yeung 的博客 数据库逻辑设计之三大范式通俗理解 | Hsu Yeung 的博客 计算机中的大小端是指什么 | Hsu Yeung 的博客 MySQL 学习笔记 | Hsu Yeung 的博客 [转]《玉子市场》的人物魅力 | Hsu Yeung 的博客 Linux 安装 Redis | Hsu Yeung 的博客 Linux 安装 MySQL | Hsu Yeung 的博客 Linux 安装 JDK | Hsu Yeung 的博客 [转]Thymeleaf 表达式工具类 | Hsu Yeung 的博客 Shell 基础入门介绍 | Hsu Yeung 的博客 Linux 中的软链接和硬链接 | Hsu Yeung 的博客 MySQL 将某些字段的值排在最前或最后 | Hsu Yeung 的博客 数据结构与算法学习笔记 | Hsu Yeung 的博客 Visual Studio Code 如何编写运行 C 程序?
使用 logrotate 切割 nginx 日志
2024-04-15 · via Hsu Yeung 的博客

由于 nginx 默认的日志文件 access.log 和 error.log
随着使用时间的增长会导致文件大小越来越大,甚至用一些编辑器打开都会直接卡死。想着要是能和程序日志一样能够自动切割、归档该多好。于是在网上搜索一番后,决定采用
linux 自带的 logrotate 和 crontab 来实现这个功能。

本文操作服务器版本:CentOS Linux release 7.6.1810 (Core)

一、 安装 logrotate

查看本机是否已安装 logrotate

which logrotate

如果未安装:

  • 在基于 Debian 的系统上,可以运行:
    sudo apt-get install logrotate
    
  • 在基于Red Hat的系统上,可以运行:
    sudo yum install logrotate
    

二、新建 logrotate 配置文件

安装好后应该会有一个 /etc/logrotate.d 目录,cd 到该目录下,新建一个关于 nginx 日志切割规则的配置文件:

cd /etc/logrotate.d

vim nginx_log_rotate

在新建的文件中输入以下内容:

/usr/local/env/nginx/nginx-1.22.1/logs/*.log {
    daily
    dateext
    minsize 10M
    missingok
    rotate 365
    compress
    delaycompress
    create 0640 root root
    sharedscripts
    postrotate
        /bin/kill -USR1 $(cat /usr/local/env/nginx/nginx-1.22.1/logs/nginx.pid 2>/dev/null) 2>/dev/null || true
    endscript
}

其中,部分常用参数表示的含义:

  • daily:表示每天切割一次日志,还支持 weekly(每周)、monthly(每月)
  • dateext:加上日期作为扩展名。
  • minsize 10M:文件大小达到 10M 才会进行切割。
  • missingok:如果日志文件不存在,不报错。
  • rotate 365:保留最近的 365 个日志文件。
  • compress:压缩旧的日志文件(默认使用 gzip)。
  • delaycompress:压缩的日志文件延迟压缩,以允许 Nginx 重新启动。
  • notifempty:如果日志文件为空,不切割(不推荐)。
  • create:创建新的日志文件时设置文件权限和所有者。
  • sharedscripts:在所有日志文件切割之后执行一次 postrotate 脚本。
  • postrotate:在切割后,需要执行的 shell 脚本,这里是发送 USR1 信号给 Nginx 以重新打开日志文件,以避免日志丢失。

更多更详细的配置可参考:日志 logrotate

三、配置定时任务

打开 crontab 文件:

vim /etc/crontab

写入以下命令:

# 每天 23:59 执行日志轮换操作,不选择 0 点是因为这时候日期已经跨天了,logrotate 归档时的日期就变成第二天了,这样归档出来的日期是不对的。
#  >/dev/null 2>&1 表示输出的信息不显示。
# -f 表示强制切割文件,即使日志文件的大小还不满足配置的最小值也会被切割
59 23 * * * root /usr/sbin/logrotate -f /etc/logrotate.d/nginx_log_rotate > /dev/null 2>&1

然后重启 crontab 即可:

systemctl restart crond