暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

systemd入门7:什么是rotated journal

编程初学者 2021-09-15
1256

说到Linux的journal的话,一定会接触到rotate这个词。

但如果查看一些解释的话,会感觉这不就是把文件存档,束之高阁的意思么?

通常存档一词,英文用 archive 表示,为什么还会有 rotate 一词呢?


其实我在动态中有提到过:

Linux中,当日志文件达到某个条件之后,日志文件会被关闭并进行存档。如果需要,还应将,比较老旧的存档删除。这样一个操作,称之为 Log Rotate 即 日志轮转。之前很疑惑,为什么要叫 rotate 。直到今天看到了一个解释:假设当前有 log,log1,log2。总共3个日志文件。当前日志程序是往 log 文件进行写入的。一旦log 文件达到某个大小,触发 日志轮转 的话,文件log就会被关闭,并被命名为 log.1 进行存档。以此类推,log.1 → log.2 ;log.2 → log.3 。看起来,就是文件发生了轮转。非常形象。
矻矻来福Krave百家号动态


所以这并不是一个简单的文件存档的过程,还包括了旧文件重命名,创建新文件,按需删除存档的过程。用汉语专业8级的水准来说,这叫吐故纳新。


那么在了解了名字从何而来之后,我们再来看看,使用 journalctl 命令的时候,哪些是和 rotated journal 即 轮转日志 有关的呢?


journalctl --rotate


首先,最直接的一定就是 --rotate 参数了。

它会让journal守护线程即 systemd-journald.service 对日志文件做轮转操作。这个命令会在轮转操作结束后返回。日志文件轮转会让当前所有活跃日志文件被标记为已存档并重命名。之后,jounald就不会再对这些文件做写入操作了。取而代之的将是一个新建的空文件。--rotate 也可以搭配 --vacumm-size=, --vacuum-time=, --vacuum-file= 一起在同一行命令中使用。


--vacuum-size=, --vacuum-time=, --vacuum-files=

首先,咱们来看一下 vacuum 是什么意思?

显然我的汉语专业8级对于理解这个单词没什么帮助。那么我们就来看图不说话:


如您所见,如果是名词的话,vacuum可以指这类真空吸尘器。那么作为动词的话,就是(用这种真空吸尘器来)打扫。


这3个参数分别对应了3个清理日志文件的目标。


--vacuum-size= 移除最老旧的存档日志文件,直到日志文件所占空间不高于此参数所指定的容量。可用K, M, G, T作为单位后缀。


--vacuum-time= 移除最老旧的存档日志文件,直到日志文件没有早于此参数所指定的时间戳的记录。可用 s, m, h, days, months, weeks, years 作为时间单位后缀。


--vacuum-files= 移除最老旧的存档日志文件,直到日志文件的数量不多于此参数所指定的文件数量。


三者分别限制了存档文件的大小,时间和数量。这3个参数如果设为0,相当于没有设置这个参数,属于画蛇添足的行为。


上文提到了这3个参数可以搭配 --rotate 一起使用。那么哥几个放在一条命令中的话,效果是:首先,所有活跃文件做轮转操作,轮转结束后,会执行vacuum参数所指定的清扫操作。那么这么做有什么好处呢?日志文件分为存档文件和活跃文件。活跃文件是指journald不停在往里写入的文件;而存档文件已经被封存起来,不再写入。这里提到的3个清扫(vacuum)操作,都是基于存档文件的。也就是说,它们无法影响到活跃文件。rotate搭配vaccum一起的话呢,可以让活跃文件暂时清零,把活跃文件转换成存档文件,这样vaccum参数就能最大程度地限制当前的日志文件,使得vaccum参数的限制能够与 --disk-usage 命令的结果非常接近。当然,这应该也只是一瞬间,毕竟活跃文件仍旧在持续不断地写入记录的。


关于rotate相关的内容,就是以上这些。


关于--disk-usage的相关介绍,我们暂时卖个关子,留到下篇文章进行介绍。记得关注,以免错过哟。


文章转载自编程初学者,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论