一、什么是logrotate
logrotate是Linux系统中一个开源日志管理工具 ,用于自动化管理日志文件。它通过预设规则实现日志文件的切割、压缩、备份和删除,有效防止日志文件无限增长占用磁盘空间。Linux系统下大多自带logrotate服务,无需手动安装(本文档基于CentOS7)。
二、核心功能特性
- 切割机制:支持按时间(daily/weekly/monthly)或文件大小(size)触发轮转
- 压缩存储:使用gzip标准压缩算法减少存储空间占用
- 自动清理:按配置保留指定数量的历史日志文件
- 安全操作:采用inode机制处理日志文件,避免影响应用程序
三、配置文件结构
/etc/logrotate.conf 核心配置文件
/etc/logrotate.d/ 日志切割任务目录
四、关键配置参数详解
| 参数 | 说明 |
|---|---|
daily / weekly / monthly |
按日期轮转,天/周/月 |
size 100M |
按文件大小轮转 |
rotate N |
旧日志的最大保存数量 |
compress |
压缩旧日志文件 |
delaycompress |
延迟压缩(下一次轮转时压缩) |
missingok |
日志文件不存在时跳过 |
notifempty |
日志为空时不轮转 |
create 0640 root root |
创建新日志文件的权限 |
copytruncate |
使用拷贝截断模式,复制日志后清空原文件 |
注意:logrotate按天切割日志并不是固定0点整执行,有5~50分钟的随机延迟,详细可查看/etc/anacrontab文件;可通过 grep 'logrotate' /var/log/cron 命令查看logrotate服务的启动时间
五、日志切割配置示例:
示例1:
/etc/logrotate.d/celery
/data/demo/logs/celery*.log {
create 0640 root root
daily
rotate 30
missingok
notifempty
compress
copytruncate
}
示例2:
/etc/logrotate.d/nginx
/etc/nginx/logs/*.log {
create 0640 nginx root
daily
rotate 15
missingok
notifempty
compress
sharedscripts
postrotate
/bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
endscript
}
配置解析(示例2):
/etc/nginx/logs/*.log { # 要切割的日志文件,可以使用*匹配多个文件
create 0640 nginx root # 新日志文件的权限
daily # 按天切割
rotate 15 # 旧日志的最大保存数量
missingok # 跳过不存在的日志文件
notifempty # 跳过空的日志文件
compress # 压缩旧日志
sharedscripts # 所有匹配的日志切割完毕后执行一次脚本
postrotate # 执行脚本开始
/bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true # 通知nginx重新打开日志文件
endscript # 执行脚本结束
}
测试配置文件的正确性:
logrotate -d /etc/logrotate.d/celery
强制触发一次切割日志:
logrotate -f /etc/logrotate.d/celery