news 2026/5/31 6:51:54

日志轮替【logrotata】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
日志轮替【logrotata】

⽇志轮替是指对系统中⽣成的⽇志⽂件进⾏周期性管理的过程。随着时间的推移,⽇志⽂件会不断 增⻓,最终可能占⽤⼤量磁盘空间。为了避免⽇志⽂件⽆限制增⻓并耗尽磁盘空间,⽇志轮替会定期 将旧的⽇志⽂件归档或删除,创建新的⽇志⽂件。

⽇志轮替的主要⽬的是:

• 节省磁盘空间:定期清理过时的⽇志⽂件,避免占⽤过多磁盘空间。

• 保持⽇志的易管理性:通过轮替管理⽇志⽂件,确保⽇志的存储不会变得混乱。

• 提⾼性能:避免单个巨⼤⽇志⽂件影响系统性能,特别是在⾼流量环境下。

在Linux系统中,⽇志轮替通常由logrotate⼯具来执⾏。logrotate会根据配置⽂件的规则定期轮替 ⽇志⽂件

安装logrotate

dnf -y install logrotate

logrotate 命令

logrotate [选项] 配置⽂件名

选项:如果此命令没有选项,则会按照配置⽂件中的条件进⾏⽇志轮替

-v: 显⽰⽇志轮替过程。加了-v 选项,会显⽰⽇志的轮替的过程

-f: 强制进⾏⽇志轮替。不管⽇志轮替的条件是否已经符合,强制配置⽂件中所有的⽇ 志进⾏轮替

该命令主要是⽤于测试环节中使⽤, ⽤于测试配置的轮替⽅案是否⽣效

配置文件说明

cat /etc/logrotate.conf

⽇志轮替规则

/etc/logrotate.d/

中包含了各种服务的⽇志配置⽂件,每个⽂件指定了特定服务的⽇志轮替规则

cd /etc/logrotate.d

/var/log/hawkey.log { missingok # 如果日志文件不存在,轮替时不报错,直接跳过 notifempty # 如果日志文件是空的,就不执行轮替,避免生成无用的空备份 rotate 4 # 最多保留 4 份旧日志备份,超过的会被删除 weekly # 按「周」为单位执行轮替 create # 轮替后自动创建新的空日志文件,保证 DNF 能继续写入 }

logrotate 配置⽂件的主要参数

一、轮转周期(什么时候转)

  • daily:每天轮转一次
  • weekly:每周轮转一次(默认)
  • monthly:每月轮转一次
  • yearly:每年轮转一次

二、保留份数(留几个旧日志)

  • rotate N:保留 N 个旧日志,超过自动删除例:rotate 7→ 保留最近 7 个

三、按大小轮转(更常用)

  • size 100M:文件达到 100M 就切(优先级高于时间)
  • maxsize 50M:到 50M 立刻切,没到时间也切
  • minsize 10M:不到 10M 不切,到时间也不切

四、压缩相关(省磁盘)

  • compress:旧日志用 gzip 压缩(常用)
  • delaycompress:本次不压,下次轮转时再压上一次(防锁文件)
  • nocompress:不压缩(不推荐)

五、文件不存在 / 空文件处理

  • missingok:日志文件不存在也不报错,直接跳过(非常常用)
  • notifempty:日志为空就不轮转(避免空文件)

六、建新日志权限(必配)

  • create 0644 root root:轮转后新建空日志,权限 644,属主 root简写:create(默认权限通常够用)

七、文件名带日期(不覆盖、好排查)

  • dateext:旧日志加日期后缀,如xxx-20260530
  • dateformat .%Y%m%d:自定义日期格式(要和 dateext 一起用)

八、执行脚本(轮转前后触发)

  • prerotate:轮转之前执行脚本
  • postrotate:轮转之后执行脚本(常用,如重启服务)
  • sharedscripts:多个日志共用一次 postrotate(否则每个文件都跑一次)

怎么设置日志轮替???

需求

/var/log/alert.log 该⽇志是我们通过/etc/rsyslog.conf 配置⽂件⾃⼰⽣成的⽇志,所以默认这 个⽇志是不会轮替的,需求说明:

1- 设置为周轮替⼀次

2- 保留6个轮替⽇志

3- ⽇志不存在,忽略⽇志的警告信息

4- 在⽇志轮替之前执⾏去除⽇志a属性, 以便于能够顺利完成轮替操作

5- 在⽇志轮替之后执⾏重启rsyslog服务:/bin/kill -HUP $(/bin/cat /var/run/rsyslogd.pid 2>/dev/null) &>/dev/null

注: 在配置前, 先对⽂件添加a属性,对⽇志⽂件进⾏保护

题目说明

4,

a属性是什么?

a是 Linux 文件的 **“追加保护” 属性 **,全称是append only

  • 给文件加上a属性后,你只能往文件里追加内容,不能删除、修改、重命名或覆盖它。
  • 它是保护日志文件不被误删的常用手段,很多生产环境都会给重要日志加上这个属性

5,

/bin/kill -HUP $(/bin/cat /var/run/rsyslogd.pid 2>/dev/null) 2>/dev/null &>/dev/null

这行代码是写在logrotate配置的postrotate里的,作用是在日志轮替完成后,让rsyslog服务重新加载配置,继续往新的日志文件里写日志

操作

先给/var/log/alert.log增加a属性

chattr +a /var/log/alert.log

chattr=change+attribute(修改属性)

+a给文件加上append only(只能追加)属性

效果:文件只能被追加写入,不能被删除、修改、重命名,用来保护日志文件不被误删。

检查文件是否已经成功加上了a属性,执行后会看到文件前面有个a标记,说明生效了

lsattr /var/log/alert.log

配置针对alert.log⽇志⽂件的轮替的配置⽂件

cd /etc/logrotate.d/

vi编辑器新建一个叫alert的文件,然后把轮替规则写进去

vi alert

i插入添加以下内容

/var/log/alert.log { weekly rotate 6 missingok sharedscripts prerotate chattr -a /var/log/alert.log endscript sharedscripts postrotate /bin/kill -HUP $(/bin/cat /var/run/rsyslogd.pid 2>/dev/null) &>/dev/null endscript }

1,/var/log/alert.log { 下面所有规则,都只对/var/log/alert.log这个文件生效

{ }是规则的开始和结束标记,里面的内容都是给这个日志文件用的

2,weekly按周轮替

3,表示最多保留6个旧日志备份,超过的会被自动删除,比如轮替后会生成alert.log.1alert.log.2… 最多保留到alert.log.6,防止日志文件无限变大占满磁盘

4,missingok:missing + ok,如果/var/log/alert.log这个文件不存在,轮替时也不报错,直接跳过

5,sharedscripts:shared + scripts(共享脚本),多个日志文件轮替时,prerotatepostrotate脚本只执行一次,而不是每个文件都跑一次,不加 sharedscripts(默认)

匹配到 5 个日志文件 → 脚本执行 5 次

6,prerotate:在轮替之前执行的脚本

7,chattr -a /var/log/alert.log :去掉日志文件的a属性(只能追加、不能修改删除的保护属性),轮替时需要改名、移动文件,而a属性会阻止这些操作,所以必须先去掉。

8,endscript:脚本内容结束

9,postrotate:轮替之后执行的脚本

10,/bin/kill -HUP $(/bin/cat /var/run/rsyslogd.pid 2>/dev/null) &>/dev/null:

rsyslog服务发一个HUP信号,让它重新加载配置,继续往新的alert.log文件里写日志。

把错误信息和输出都丢到 “黑洞” 里,避免logrotate日志里出现无关报错。

重启logrotate.log

systemctl restart logrotate systemctl status logrotate

执行强制轮替操作

logrotate -vf /etc/logrotate.conf

观察是否出现新的alter.log⽇志

cd /var/log

  • 新日志:alert.log(空文件,正在被写入)
  • 旧日志:alert.log-20260530(改名后的备份,不会再被写入)

观察新的alert.log⽂件,是否存在a属性,没有任何属性也可以说明轮替成功

lsattr alert.log

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/31 6:42:06

从MATLAB仿真到理论证明:实战验证能控性与格拉姆矩阵的关系

从MATLAB仿真到理论证明:实战验证能控性与格拉姆矩阵的关系在控制系统的设计与分析中,能控性是一个基础而重要的概念。它决定了我们能否通过合适的控制输入,将系统从任意初始状态驱动到期望的终态。格拉姆矩阵判据作为判断能控性的有力工具&a…

作者头像 李华