我最近在多个系统的 logrotate.conf 中启用了压缩。旧的未压缩日志仍保留其旧编号。我希望运行一个脚本,将这些旧日志放在它们在未启用压缩的情况下在轮换中的数字位置。这些日志包括、、messages
和其他。boot.log
spooler
[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 中打开压缩之前手动压缩旧日志。
总结一下两个问题:
- 有没有办法让 logrotate.conf 识别这些旧文件并自行压缩它们?
- 编写脚本手动轮换到旧日志文件按顺序排列然后进行压缩的最佳方法是什么?
答案1
据我所知,logrotate 无法将旧文件放回原位。因此您需要手动/使用小脚本来执行此操作。
请注意,根据您的配置,logrotate 只会在有限的时间内轮换旧日志文件,然后删除它们。因此,恢复旧备份文件可能毫无用处,除非您更改了 logrotate 配置,使其永远不会删除旧日志(配置变量rotate
)。
答案2
日志轮换不能但gzip messages.?
会为您处理这个问题。