Logrotate
来自 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 }