Skip to content

logrotate

介绍

logrotate 是 Linux 下用于 管理日志文件自动轮转、压缩、删除 的工具。它可以 防止日志文件无限增长,占满磁盘空间,并支持 定期清理旧日志。

日志轮转(Rotate):定期创建新日志,并重命名旧日志。

日志压缩(Compress):轮转后自动使用 gzip 等压缩旧日志,减少磁盘占用。

删除过旧日志(Remove):可设置 保留 X 天的日志,超过的自动删除。

限制日志大小(Size-based Rotation):可以设定 当日志达到一定大小时轮转

自动执行(Cron 任务):一般会 每天由系统自动运行

轮转后执行命令(postrotate):轮转完成后可 重启 Nginx、Apache、MySQL 等服务,让它们重新生成日志文件。

运行方式

logrotate 通常由 cron 定时执行,默认每天检查一次,位于:

sh
/etc/cron.daily/logrotate

也可以手动执行

sh
logrotate -f /etc/logrotate.d/nginx  # 立即轮转 nginx 日志

配置文件

logrotate 主配置文件 位于:/etc/logrotate.conf

各服务的独立日志规则 通常在:/etc/logrotate.d/

如:

sh
/etc/logrotate.d/nginx  # Nginx 日志轮转
/etc/logrotate.d/mysql  # MySQL 日志轮转
/etc/logrotate.d/syslog # 系统日志轮转

配置示例

nginx日志轮转

sh
/data/wwwlogs/nginx/*.log {
    daily                # 每天轮转日志
    missingok            # 如果日志文件不存在,不报错
    rotate 14            # 只保留最近 14 天的日志
    compress             # 轮转后压缩(默认 gzip)
    delaycompress        # 延迟一轮再压缩,避免日志仍在写入时被压缩
    notifempty           # 如果日志为空,则不轮转
    create 0640 root adm # 轮转后创建新日志,权限 0640,root 拥有,adm 组可读
    dateext              # 旧日志文件加上日期后缀(access.log.2024-03-20)
    dateformat .%Y-%m-%d # 日期后缀格式
    postrotate           # 轮转后执行命令,重启 Nginx 日志
        /bin/kill -USR1 `cat /var/run/nginx.pid` 2>/dev/null || true
    endscript
}

手动执行logrotate

测试配置

logrotate -d /etc/logrotate.d/nginx

强制执行轮转

logrotate -f /etc/logrotate.d/nginx