本文主要是介绍Linux 使用 Crontab + Logrotate 实现日志分割,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Logrotate 是一个 Linux 系统日志的管理工具,可以对单个日志文件或某个目录下的文件按时间/大小进行切割、压缩操作;指定日志保存数量;还可以在切割之后运行自定义命令。
安装
大多数 Linux 发行版上都默认安装有 logrotate 包,如果你的 Linux 系统中找不到 logrotate, 可以使用 apt-get 或 yum 命令来安装。
yum install -y logrotate
基本用法
主配置文件
/etc/logrotate.conf
这个文件是 logrotate 的主配置文件,定义了日志文件分割的通用参数。
自定义配置文件
自定义配置文件在 /etc/logrotate.d
目录下。
日志分割步骤
- 默认分割后日志的命名为源日志名称 + . 序号(从 1 开始)。
- 执行分割,将源日志文件分割为源日志文件名 .1。
- 根据
rotate
设置,如果此次分割后文件数量大于rotate
设置,那么删除序号最大的那个分割文件,也就是最旧的分割日志。
实际开发中的注意事项
- 使用
create
代替copytruncate
,避免丢失日志数据。 - 在分割后通知应用程序重新打开新的日志文件进行写入。
分割文件压缩
/opt/logtest/*.log {dailyrotate 2copytruncatemissingokcompress # 以gzip方式压缩nodelaycompress # 所有分割后的文件都进行压缩
}
按照时间分割
/opt/logtest/*.log {daily # 每天分割一次rotate 30 # 保留最近30个分割后的日志文件copytruncatemissingokdateext # 切割后的文件添加日期作为后缀dateyesterday # 配合dateext使用,添加前一天的日期作为分割后日志的后缀dateformat -%Y-%m-%d # 格式为2022-02-08 默认添加的日期后缀格式为 yyyyMMdd,可以用 dateformat 自定义。
}
按照大小分割
/opt/logtest/*.log {daily # 每天分割一次size 5M # 源文件小于5M时不分割rotate 30 # 保留最近30个分割后的日志文件createmissingokdateext # 切割后的文件添加日期作为后缀dateyesterday # 配合dateext使用,添加前一天的日期作为分割后日志的后缀
}
每小时分割
- logrotate 配置文件中指定分割频率为
hourly
。 - 在
/etc/cron.hourly
中加入logrotate
可执行命令。
自定义分割
在非 /etc/logrotate.d
目录创建 logrotate 配置文件,并添加 crontab 计划任务。
00 01 * * * /usr/sbin/logrotate -v /etc/logrotate.d/nginx >> /dev/null 2>&1
这篇关于Linux 使用 Crontab + Logrotate 实现日志分割的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!