logrotate 是一个 Linux 工具,用于管理和轮转日志文件。它可以定期将日志文件备份、压缩和清理,以防止日志文件占用过多磁盘空间。以下是 logrotate 的详细使用方法:

1. 安装 logrotate

大多数 Linux 发行版默认都包含 logrotate。如果没有安装,可以使用包管理器进行安装:

  • Debian/Ubuntu:
sudo apt-get install logrotate
  • Red Hat/CentOS:
sudo yum install logrotate

2. 配置 logrotate

logrotate 的配置文件通常位于 /etc/logrotate.conf,并且可以为特定的应用或日志文件创建单独的配置文件。主要的配置文件路径为 /etc/logrotate.d/

配置示例

以下是一个简单的 logrotate 配置示例,用于管理 Supervisor 的日志文件:

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

# 全局设置
weekly                 # 轮转周期:每周
rotate 4               # 保留 4 个备份
create 0640 root root  # 新日志文件权限和所有者
compress                # 压缩轮转后的日志
delaycompress           # 延迟压缩(保留一个周期的原始日志)
notifempty              # 只轮转非空的日志文件
missingok               # 如果日志文件丢失,不报告错误

应用配置文件 /etc/logrotate.d/myapp:

/var/log/myapp.out.log {
    daily                # 轮转周期:每天
    rotate 7             # 保留 7 个备份
    compress              # 压缩轮转后的日志
    delaycompress         # 延迟压缩(保留一个周期的原始日志)
    missingok             # 如果日志文件丢失,不报告错误
    notifempty            # 只轮转非空的日志文件
    create 0640 root root # 新日志文件权限和所有者
    sharedscripts        # 脚本共享
    postrotate
        # 轮转后的处理脚本,例如重启程序
        systemctl reload supervisor > /dev/null
    endscript
}

/var/log/myapp.err.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0640 root root
    sharedscripts
    postrotate
        systemctl reload supervisor > /dev/null
    endscript
}

3. 手动运行 logrotate

可以使用 logrotate-f 选项强制运行日志轮转:

sudo logrotate -f /etc/logrotate.conf

4. 检查 logrotate 状态

logrotate 的状态文件通常位于 /var/lib/logrotate/status。可以查看这个文件来检查上次轮转的时间和状态。

cat /var/lib/logrotate/status

5. 配置脚本执行

logrotate 支持在轮转日志之后执行自定义脚本,如重启服务、清理缓存等。可以在配置文件中使用 postrotateendscript 来指定这些操作。

6. 日志轮转的高级配置

  • 日志分割和压缩:可以选择不同的压缩方式,如 gzipbzip2 等。
  • 配置自定义周期:可以配置按小时、按周或按月进行轮转。
  • 特殊处理:例如,只在特定条件下轮转,或对不同的日志文件使用不同的策略。