logrotate日志滚动切割删除

1. 安装 logrotate

1
yum install -y logrotate

2. 创建一个 logrotate 配置文件

假设你要管理 /var/log/myapp/app.log,可以在 /etc/logrotate.d/ 下新建:

1
vi /etc/logrotate.d/myapp

内容示例:

1
2
3
4
5
6
7
8
9
10
/var/log/myapp/app.log {
size 100M # 文件大于 100M 时切割
rotate 5 # 最多保留 5 个旧文件
compress # 压缩旧日志(生成 .gz)
delaycompress # 从第二个开始压缩,最新的切割文件不压缩
missingok # 如果日志文件不存在也不报错
notifempty # 空文件不切割
copytruncate # 拷贝并截断(适合正在写入的应用日志)
create 0640 root root # 切割后新建日志文件,权限与属主
}

3. 手动测试配置

执行:

1
logrotate -d /etc/logrotate.d/myapp

-d 是 debug 模式,不会真正执行,只显示动作。
确认没问题后再执行:

1
logrotate -f /etc/logrotate.d/myapp

-f 表示强制执行一次切割。


4. 系统默认调度

CentOS 7 默认会通过 cron.daily 调用 /etc/cron.daily/logrotate,所以只要配置好了,系统会自动触发。

但注意:默认 logrotate 是 每天执行一次,所以如果你只依赖 size 100M 触发,可能会延迟到第二天才切割。
如果想要更及时(例如每小时),可以加个 cron job:

1
echo "0 * * * * /usr/sbin/logrotate /etc/logrotate.conf" >> /etc/crontab