Linux命令:logrotate - 日志轮转

介绍

logrotate 是一个用于管理日志文件轮换、压缩和删除的工具。它可以定期将日志文件分割成较小的文件,并将旧文件压缩或删除。这样,就可以防止日志文件过大,占用过多的磁盘空间。


如果没有安装,可以使用yum命令进行安装
yum install logrotate -y

`logrotate`工作原理:`logrotate` 命令执行后,读取配置文件,根据配置文件中的规则处理日志文件。`logrotate` 会检测日志文件大小,如果超过了限制,就会执行文件轮换操作。

轮换流程:

  1. 将日志文件重命名为备份文件
  2. 创建新的日志文件
  3. 如果配置文件中设置了 postrotate 指令,则会执行该指令中的命令。
  4. 如果配置文件中设置了 compress 选项,则会压缩备份文件。
  5. 如果配置文件中设置了 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:设置文件属性
  • postrotateendscript段: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命令系列:

posted @ 2024-03-26 11:08  Charramma  阅读(531)  评论(0编辑  收藏  举报