logrotate工具介绍
基本概念
logrotate是 Linux/Unix 系统中用于管理系统日志文件的核心工具,主要功能是:
- 自动轮转:定期重命名、压缩、删除旧的日志文件
- 防止磁盘占满:避免日志文件无限制增长
- 保持日志有序:按时间或大小组织日志文件
- 减少存储空间:自动压缩旧日志
工作流程示例
假设有日志文件 /var/log/messages:
初始:messages
第一次轮转:messages → messages.1(新messages为空文件)
第二次轮转:messages.1 → messages.2,messages → messages.1
第三次轮转:messages.2 → messages.3,messages.1 → messages.2,messages → messages.1
... 以此类推核心配置文件
主配置文件
bash
/etc/logrotate.conf # 全局默认配置服务特定配置
bash
/etc/logrotate.d/ # 目录,存放各服务的独立配置
/etc/logrotate.d/rsyslog # rsyslog 服务的日志配置
/etc/logrotate.d/nginx # Nginx 日志配置
/etc/logrotate.d/apache2 # Apache 日志配置常用配置参数详解
轮转触发条件
bash
daily # 每天轮转一次
weekly # 每周轮转一次
monthly # 每月轮转一次
size 10M # 文件达到 10MB 时轮转
size 100k # 文件达到 100KB 时轮转
size 1G # 文件达到 1GB 时轮转
maxsize 100M # 即使未到周期,超过大小也轮转文件保留策略
bash
rotate 7 # 保留 7 个轮转文件
rotate 365 # 保留 365 个轮转文件
rotate 0 # 不保留任何旧文件文件命名方式
bash
dateext # 使用日期作为后缀(messages-20251224)
dateformat .%Y%m%d # 自定义日期格式
extension .log # 轮转后文件扩展名压缩与清理
bash
compress # 使用 gzip 压缩旧日志
nocompress # 不压缩
compresscmd /bin/bzip2 # 指定压缩程序
compressoptions -9 # 压缩选项(最大压缩)
delaycompress # 延迟压缩(下一次轮转时再压缩)文件创建与权限
bash
create 0644 root root # 创建新文件,设置权限和所有者
create 0640 root adm
nocreate # 不创建新文件邮件相关
bash
mail user@domain.com # 删除旧日志前邮件通知
mailfirst # 轮转前发送邮件
maillast # 轮转后发送邮件(默认)
nomail # 不发送邮件脚本钩子
bash
prerotate # 轮转前执行的脚本
/usr/bin/command
endscript
postrotate # 轮转后执行的脚本
/bin/kill -HUP `cat /var/run/service.pid`
endscript其他常用选项
bash
missingok # 日志不存在时不报错
notifempty # 空文件不轮转
ifempty # 空文件也轮转(默认)
sharedscripts # 多个日志共享 prerotate/postrotate
copytruncate # 复制后截断,代替移动(适用于某些不能重命名的程序)完整配置示例
系统关键日志(长时间保留)
bash
/var/log/messages
/var/log/secure
/var/log/cron
{
daily # 每日轮转
rotate 365 # 保留 365 个轮转文件
compress # 使用 gzip 压缩旧日志
dateext # 使用日期作为后缀(messages-20251224)
dateformat -%Y%m%d # 自定义日期格式
missingok # 日志不存在时不报错
notifempty # 空文件不轮转
sharedscripts # 多个日志共享 prerotate/postrotate
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2>/dev/null` 2>/dev/null || true
endscript
}常用命令
测试配置文件(不实际执行)
bash
logrotate -d /etc/logrotate.conf # 调试模式
logrotate -d /etc/logrotate.d/rsyslog # 调试特定配置强制执行轮转
bash
logrotate -f /etc/logrotate.conf # 强制轮转
logrotate -f /etc/logrotate.d/nginx # 强制轮转 Nginx 日志查看详细信息
bash
logrotate -v /etc/logrotate.conf # 详细输出
logrotate -v -f /etc/logrotate.conf # 强制并显示详情使用状态文件
bash
logrotate -s /var/lib/logrotate.status /etc/logrotate.conf自动执行机制
logrotate 通常通过 cron 自动运行:
bash
# 查看 logrotate 的 cron 任务
cat /etc/cron.daily/logrotate
# 内容通常类似:
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf