logrotate 会删除 .gz 文件吗?也就是说,带 * 路径的 logrotate 是否会旋转现有的 .gz 文件?

Does logrotate remove .gz files? That is, does logrotate with a * path rotate an existing .gz file?

// , 这个问题有点模棱两可

场景如下:

我有以下三个扩展名的日志,但我当前的规则仅适用于 *.log 文件:

.1
.log
.txt

此外,因为 Tomcat 正在轮换日志,所以我有以下内容:

.gz

我想轮换所有这些文件,但我不想以任何 .gz.gz 文件结束。我该怎么做?

Tomcat

的对数轮换规则

目前,我对 Tomcat 日志有以下规则:

% sudo cat /etc/logrotate.d/tomcat
# THIS FILE IS AUTOMATICALLY DISTRIBUTED BY PUPPET.  ANY CHANGES WILL BE
# OVERWRITTEN.

/opt/apache-tomcat_1/logs/*.log {
  compress
  daily
  delaycompress
  maxage 60
  maxsize 500M
  minsize 1k
  rotate 20
  size 100k
}

为了尝试解决这个问题,我可以将 /opt/apache-tomcat_1/logs/*.log 路径更改为 /opt/apache-tomcat_1/logs/* 之类的路径,但我想知道这是否会重新压缩或处理 .gz 中的文件与 .log.txt 文件相同。

logrotate 是否知道如何单独保留现有 .gz 文件?

其他文件

/etc/cron.daily/logrotate 上次更新是在大约 12 天前:

% sudo ls -lanh /etc/cron.daily/logrotate
-r-xr-xr-x 1 0 0 313 Jun 29 21:48 /etc/cron.daily/logrotate

内容如下:

#!/bin/sh
# THIS FILE IS AUTOMATICALLY DISTRIBUTED BY PUPPET.  ANY CHANGES WILL BE
# OVERWRITTEN.

OUTPUT=$(/usr/sbin/logrotate /etc/logrotate.conf 2>&1)
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
    echo "${OUTPUT}"
fi
exit $EXITVALUE

并且,如果它是相关的:

% cat /etc/logrotate.conf
# THIS FILE IS AUTOMATICALLY DISTRIBUTED BY PUPPET.
# ANY CHANGES WILL BE OVERWRITTEN.

create
weekly
rotate 4

# configurable file rotations
include /etc/logrotate.d

我做了一个quick search online for this, and found some results。 askubuntu.com 答案最接近,但我仍然不确定 logrotate 是否会“旋转”由其他服务创建的 .gz 文件,例如 Tomcat.

当在 logrotate 路径中使用 * globbing 时,这些结果中没有任何内容可以回答有关由其他服务(例如 Tomcat)创建的预先存在的 .gz 文件的特定问题。

现在我只是用多个paths/rules来解决这个问题:https://v.gd/yNfAAu

但我很好奇。什么脚本行为智能地使 logrotate 忽略现有的 .gz 文件,或者以不同的方式处理它们,同时仍然删除足够旧或足够大的文件? Logrotate 是否已经有办法做到这一点?

来自"man logrotate"

您可以使用变量 "tabooext" 来指定您希望 logrotate 忽略的文件扩展名。