Linux命令:logrotate - 日志轮转
介绍
logrotate
是一个用于管理日志文件轮换、压缩和删除的工具。它可以定期将日志文件分割成较小的文件,并将旧文件压缩或删除。这样,就可以防止日志文件过大,占用过多的磁盘空间。
如果没有安装,可以使用yum命令进行安装
yum install logrotate -y
`logrotate`工作原理:`logrotate` 命令执行后,读取配置文件,根据配置文件中的规则处理日志文件。`logrotate` 会检测日志文件大小,如果超过了限制,就会执行文件轮换操作。
轮换流程:
- 将日志文件重命名为备份文件
- 创建新的日志文件
- 如果配置文件中设置了
postrotate
指令,则会执行该指令中的命令。 - 如果配置文件中设置了
compress
选项,则会压缩备份文件。 - 如果配置文件中设置了
rotate
选项,则会保留指定数量的备份文件,删除其他的备份文件。
注意:logrotate
没有守护进程,不会实时监控你的日志文件状态并自动运行,我们没有执行 logrotate
命令时,即使日志文件大小超过了 logrotate
配置的大小,logrotate
也不会进行日志轮换。
为什么没有手动执行
logrotate
, 系统日志也可以进行轮转?
因为许多Linux发行版默认配置了logrotate
任务,在/etc/cron.daily/
下会有一个名为logrotate
或者其他相关的脚本,logrotate
由此通过cron每日任务执行。
使用
1. 实例:配置nginx日志轮换
在/etc/logrotate.d
目录中创建一个新文件,可以就叫nginx,在这个文件中用于配置对nginx日志的轮换规则
/var/log/nginx/*.log {
size 1G
rotate 5
compress
missingok
notifempty
create 640 nginx nginx
postrotate
systemctl reload nginx
endscript
}
以上配置段的含义:
size 1G
: 当/var/log/nginx
目录下的.log文件大小达到1G就执行轮换rotate 5
:保留五个备份文件compress
:压缩备份文件,默认使用gzip方式missiongok
:日志文件不存在也不报错create 640 nginx nginx
:设置文件属性postrotate
和endscript
段:logrotate
只负责轮换日志文件,并不会重启日志生成程序(例如 nginx)。如果没有这一段,必须要手动重启,nginx才会在新的日志文件中写入日志
执行logrotate:
logrotate -f /etc/logrotate.d/nginx
2. logrotate常用选项及配置项
-d
:打印调试信息,帮助你调试配置文件。-f
:强制执行轮换操作,不管日志文件是否已经轮换过。- -
m
:发送邮件通知,通知你日志轮换的结果。 -s
:打印状态信息,帮助你检查日志轮换的状态。-v
:打印详细信息,帮助你了解日志轮换的过程。
在配置文件中,你也可以使用以下选项:
size
:设置日志文件的大小限制。当日志文件大小超过该限制时,会执行轮换操作。rotate
:设置保留的日志文件数量。当日志文件数量超过该限制时,会删除旧的日志文件。compress
:指示是否压缩旧的日志文件。missingok
:如果日志文件不存在,logrotate
不会报错。notifempty
:如果日志文件为空,logrotate
也会进行文件轮换操作。create
:设置新的日志文件的权限。
3. 执行logrotate
logrotate /etc/logrotate.conf
由于logrotate不会自动监测日志文件状态并轮换,所以我们可以配置cron任务
# 每天凌晨三点执行
0 3 * * * /usr/sbin/logrotate /etc/logrotate.conf
Linux命令系列: