You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用logrotate压缩超过1天的指定日志文件?

搞定logrotate压缩超期日志的配置方案

没问题,我来帮你配置logrotate,精准压缩那些修改时间超过1天的TRACE日志文件——正好匹配你说的TRACE_03.log、TRACE_07.log这两个超期文件,较新的日志会原样保留。

咱们一步步来:

1. 创建专属logrotate配置文件

先在logrotate的配置目录下新建一个配置文件,比如trace_logs:

sudo vi /etc/logrotate.d/trace_logs

把下面的内容粘贴进去(记得把/path/to/your/替换成你的日志实际存放路径,比如/var/log/):

/path/to/your/TRACE_*.log {
    # 每天自动检查一次日志状态
    daily
    # 启用gzip压缩处理后的日志
    compress
    # 允许日志文件不存在,避免无意义的报错
    missingok
    # 空日志文件直接跳过,不处理
    notifempty
    # 保留1份轮转后的日志文件(用于压缩)
    rotate 1
    # 只处理修改时间超过1天的文件
    prerotate
        # 检查文件修改时间,不到1天就跳过
        if [ $(stat -c %Y "$1") -gt $(date -d "1 day ago" +%s) ]; then
            exit 1
        fi
    endscript
    # 不创建新的空日志文件(因为这些超期日志已经不再被写入了)
    nocreate
}

2. 关键参数说明

  • prerotate脚本:这是核心逻辑,会逐个检查每个TRACE日志的修改时间,只对超过1天的文件执行后续操作
  • compress:自动把轮转后的日志压缩成.gz格式
  • nocreate:因为超期日志已经停止写入,所以不需要生成新的空日志文件,避免冗余

3. 测试并生效配置

先做模拟运行,确认哪些文件会被处理(不会实际修改文件):

sudo logrotate -d /etc/logrotate.d/trace_logs

如果模拟结果符合预期,就强制运行一次让配置生效:

sudo logrotate -f /etc/logrotate.d/trace_logs

4. 自动运行设置

logrotate默认已经通过系统cron每天自动执行(通常在/etc/cron.daily/logrotate),所以之后每天它都会自动检查并压缩超期的TRACE日志,不用手动操作。

额外说明

如果你的TRACE日志里有正在被服务写入的文件(比如示例里的TRACE_01.log),可以在配置里加上copytruncate参数——它会先复制当前日志内容到轮转文件,再截断原文件,避免服务因为日志文件被重命名而无法写入。

内容的提问来源于stack exchange,提问作者Gavin Yap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:04:38