【Linux】logrotate实现日志文件定时分割

问题背景

项目部署的过程中,经常会需要查看程序的执行日志。我之前的做法都是用nohup ... > xxx.log 2>&1 &将日志保存到xxx.log文件中的。但是问题是,程序有时会运行很长时间,一直保存在一个文件里,文件会越来越大,下载、查看都不是很方便。所以就需要一种方法能够定时地将日志文件分割,比如按天分割,每天保存一个。正好Linux系统上的logrotate工具可以实现这个功能。

logrotate是什么?

github:https://github.com/logrotate/logrotate

官方介绍:

The logrotate utility is designed to simplify the administration of log files on a system which generates a lot of log files. Logrotate allows for the automatic rotation compression, removal and mailing of log files. Logrotate can be set to handle a log file hourly, daily, weekly, monthly or when the log file gets to a certain size.

简单来说,就是可以自动地、定时地对日志文件进行轮转、压缩、删除。对于轮转操作,我理解就是对日志文件定时地进行备份、重命名,并生成新的日志文件的过程。

logrotate配置文件

配置文件主要有两部分:

shell 复制代码
# 主配置
/etc/logrotate.conf

# 子配置
/etc/logrotate.d/*

主配置里就是一些全局配置,我在此次实现里没用到,就先不管。

子配置里存放的是不同服务对应的日志文件。比如我有一个springboot服务一直在往nohup.out文件中写文件,现在想用logrotate工具实现日志分割功能,那就可以在/etc/logrotate.d目录下创建一个名字为springboot文件:

shell 复制代码
/etc/logrotate.d/springboot

文件里的具体内容如下:

shell 复制代码
/path/to/nohup.out {
   # 按每天轮转
   daily
   # 保存7个历史备份,即一周
   rotate 7
   # 日志非空时轮转
   notifempty
   # 自动创建新的日志文件,和源文件有相同权限
   create
   # 分割的日志文件的文件名以日期格式结尾
   dateext
}

当然也有其他的配置,具体可以自行百度。

验证配置文件是否编写正确

写好了之后,我不可能等到每天凌晨它启动轮转的时候再去看它是否能够正常工作,那太费时间了。所以就需要手动地先进行验证。

好在logrotate也提供了这样的功能:

  1. sudo logrotate -d /path/to/mylogrotate.conf,用于验证配置文件是否编写正确。如果没有error报错,说明编写正确
  2. sudo logrotate -f /path/to/mylogrotate.conf,用于强制执行轮转,执行后立刻执行轮转,这个时候就能查看是否能分割日志文件了

这里需要注意的是:

  1. 分割的日志文件默认是和轮转的日志文件同级目录的
  2. 由于轮转后会清空日志文件,所以保险起见,一定要先进行备份!!!(对于这种会删除数据、日志等的操作一定都要备份!!)

写配置文件遇到的问题

在写配置文件的时候,发现注释不能和单个配置写在同一行里,否则注释的#符号会被识别成配置,导致报错。正确的写法应该是注释单独写一行,比如:

shell 复制代码
/path/to/nohup.out {
   # 按每天轮转
   daily
   # 保存7个历史备份,即一周
   rotate 7
   # 日志非空时轮转
   notifempty
   # 自动创建新的日志文件,和源文件有相同权限
   create
   # 分割的日志文件的文件名以日期格式结尾
   dateext
}

错误的写法:

shell 复制代码
/path/to/nohup.out {
   daily  # 按每天轮转
   rotate 7  # 保存7个历史备份,即一周
   notifempty  # 日志非空时轮转
   create  # 自动创建新的日志文件,和源文件有相同权限
   dateext  # 分割的日志文件的文件名以日期格式结尾
}
相关推荐
神奇霸王龙10 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
Web极客码10 小时前
WordPress SEO优化:提升网站排名的13个关键步骤
服务器·seo·wordpress
生活爱好者!10 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
groundhappy11 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
尽兴-12 小时前
企业业务系统架构选型与渐进式演进
运维·系统架构·devops
通信小小昕12 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
壮哥_icon12 小时前
【Android 系统开发】使用 BAT 脚本高效自动化管理 /system/priv-app/ 系统应用(安装与卸载)
android·运维·自动化
RD_daoyi13 小时前
外链权重暴跌至13%,品牌提及反超传统链接——2026年不做Digital PR,你的独立站等于隐形
运维·网络·学习·机器学习·搜索引擎
电商API_1800790524713 小时前
企业ERP进销存场景|京东商品详情接口自动同步方案|凭证鉴权批量调用技术实操
大数据·运维·人工智能·爬虫·数据挖掘·网络爬虫
张小姐的猫13 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式