logrotate 是什么?
logrotate 是一个 Linux 系统自带的日志管理工具,用于自动切割、压缩、删除和归档日志文件。它由 cron 定时任务驱动(通常是每天执行一次),通过读取配置文件决定如何处理各个服务的日志。
核心价值:防止日志无限增长撑爆磁盘,同时让日志按时间/大小有序归档。
🗂️ 配置文件体系
logrotate 的配置分为两层:
实际执行时,logrotate 会先读取主配置,然后按字母顺序遍历 /etc/logrotate.d/ 目录下的所有文件。
📝 配置语法详解
基本结构
bash
/路径/到/日志文件 {
参数1
参数2
参数3
# 可以嵌套脚本
postrotate
执行的命令
endscript
}支持通配符:
/var/log/nginx/*.log匹配该目录下所有.log文件如果有多个路径,用空格分开:
/var/log/nginx/access.log /var/log/nginx/error.log
🔧 核心参数详解
切割周期(选一个)
触发条件(可与周期并用)
注意:size 和 daily/weekly/monthly 可以同时存在。logrotate 的规则是:哪个条件先满足就触发。比如配置了 daily 和 size 100M,如果一天内日志没到 100M,就等每天定时切割;如果半天就涨到 100M,会立即切割。
保留策略
压缩
delaycompress 的使用场景:方便你快速查看刚切割的日志(不用解压),因为昨天/今天可能还在排查问题,而更旧的日志可以直接压缩归档。
文件处理
权限与安全
其他
🛠️ 常用命令
调试示例:
bash
# 查看 nginx 的 logrotate 会怎么处理,但不真正执行
sudo logrotate -d /etc/logrotate.d/nginx
# 强制执行一次
sudo logrotate -f /etc/logrotate.d/nginx📂 实际配置示例与解析
示例1:Nginx 标准配置
bash
/var/log/nginx/*.log {
daily
dateext
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi \
endscript
postrotate
invoke-rc.d nginx rotate >/dev/null 2>&1
endscript
}

可以看到切割后的日志文件
评论区