在logrotate中打开压缩后,如何有效地重命名和压缩旧日志?

在logrotate中打开压缩后,如何有效地重命名和压缩旧日志?

我最近在多个系统的 logrotate.conf 中启用了压缩。旧的未压缩日志仍保留其旧编号。我希望运行一个脚本,将这些旧日志放在它们在未启用压缩的情况下在轮换中的数字位置。这些日志包括、、messages和其他。boot.logspooler

[user@test ~]$ ls -ltr /var/log/messages*
-rw------- 1 root root 283380 Jan 22 03:49 /var/log/messages.4
-rw------- 1 root root 212641 Jan 29 03:59 /var/log/messages.3
-rw------- 1 root root 278964 Feb  5 04:01 /var/log/messages.2
-rw------- 1 root root   7828 Feb 16 04:02 /var/log/messages.7.gz
-rw------- 1 root root  12417 Feb 17 04:02 /var/log/messages.6.gz
-rw------- 1 root root   2289 Feb 18 04:02 /var/log/messages.5.gz
-rw------- 1 root root   2135 Feb 19 04:02 /var/log/messages.4.gz
-rw------- 1 root root   2138 Feb 20 04:02 /var/log/messages.3.gz
-rw------- 1 root root   2403 Feb 21 04:02 /var/log/messages.2.gz
-rw------- 1 root root   2339 Feb 22 04:02 /var/log/messages.1.gz
-rw------- 1 root root   8496 Feb 22 10:19 /var/log/messages

如果我要手动重命名这些文件,我会对mv messages.2 messages.8.tmp每个日志执行 ,这样就不会覆盖当前名为 messages.8 的文件。重命名所有文件后,我会执行 ,然后mv messages.8.tmp messages.8执行gzip -9 messages.8

我已经尝试过 for 和 while 循环和 sed,但我仍然是一名新手脚本编写者。

最新和最旧的未压缩日志的数量将因系统而异。

将来,我将在 logrotate.conf 中打开压缩之前手动压缩旧日志。

总结一下两个问题:

  1. 有没有办法让 logrotate.conf 识别这些旧文件并自行压缩它们?
  2. 编写脚本手动轮换到旧日志文件按顺序排列然后进行压缩的最佳方法是什么?

答案1

据我所知,logrotate 无法将旧文件放回原位。因此您需要手动/使用小脚本来执行此操作。

请注意,根据您的配置,logrotate 只会在有限的时间内轮换旧日志文件,然后删除它们。因此,恢复旧备份文件可能毫无用处,除非您更改了 logrotate 配置,使其永远不会删除旧日志(配置变量rotate)。

答案2

日志轮换不能但gzip messages.?会为您处理这个问题。

相关内容