Logrotate

来自 ArchWiki

来自 https://github.com/logrotate/logrotate

logrotate 实用程序旨在简化系统上生成大量日志文件的日志文件管理。Logrotate 允许自动轮换、压缩、删除和邮寄日志文件。Logrotate 可以设置为每天、每周、每月或当日志文件达到特定大小时处理日志文件。

默认情况下,logrotate 的轮换包括使用数字后缀重命名现有日志文件,然后重新创建原始日志文件。例如,/var/log/syslog.log 被重命名为 /var/log/syslog.log.1。如果 /var/log/syslog.log.1 已经存在于之前的轮换中,它会首先被重命名为 /var/log/syslog.log.2。(可以配置要保留的备份日志数量。)

安装

Logrotate 可以通过 logrotate 软件包安装。

默认情况下,logrotate 使用 systemd 计时器logrotate.timer 每日运行。

配置

logrotate 的主要配置文件是 /etc/logrotate.conf,它设置默认参数;其他应用程序特定的配置文件包含在 /etc/logrotate.d 目录中。应用程序特定的配置文件中设置的值会覆盖主配置文件中的相同参数。有关配置示例和可用指令的参考,请参阅 logrotate.conf(5)

要验证 logrotate 是否正常工作,请在调试模式下运行它,在此模式下它除了生成调试输出外什么也不做

$ logrotate --debug /etc/logrotate.conf

压缩日志

Logrotate 可以使用自定义命令(如 zstd)压缩日志。

/etc/logrotate.conf
compress
compresscmd /usr/bin/zstd
compressext .zst
compressoptions -T0 --long
uncompresscmd /usr/bin/unzstd

有关更多详细信息,请参阅 logrotate.conf(5)zstd(1)

用法

logrotate 通常通过 systemd 服务运行:logrotate.service

手动运行 logrotate

# logrotate /etc/logrotate.conf

轮换单个日志文件

# logrotate /etc/logrotate.d/mylog

模拟运行配置文件(dry run

# logrotate --debug /etc/logrotate.d/mylog

要强制运行轮换,即使条件未满足,请运行

# logrotate -vf /etc/logrotate.d/mylog

有关更多详细信息,请参阅 logrotate(8)

故障排除

exim 日志未轮换

如果您在 /etc/logrotate.conf 中设置了 olddir 变量,您将收到如下消息

error: failed to rename /var/log/exim/mainlog to /var/log/old/mainlog.1: Permission denied

要解决此问题,请将用户 exim 添加到组 log。然后将 olddir(通常是 /var/log/old)的组更改为 log 而不是默认的 root

检查 logrotate 状态

Logrotate 轮换通常记录到 /var/lib/logrotate.status-s 选项允许您指定另一个状态文件)

/var/lib/logrotate.status
"/var/log/mysql/query.log" 2016-3-20-5:0:0
"/var/log/samba/samba-smbd.log" 2016-3-21-5:0:0
"/var/log/httpd/access_log" 2016-3-20-5:0:0
...

因父目录权限不安全而跳过日志

配置哪个用户和哪个组必须运行 /etc/logrotate.d/job

file-to-be-rotated {
    su user group
    rotate 4
}

参见