使用 cronolog 压缩轮换日志

使用 cronolog 压缩轮换日志

我有一堆装有 Apache 的服务器(Centos 5.x),它们的日志使用 cronolog 轮换。在一定时间后自动压缩和删除这些日志的最佳策略是什么? CustomLog "|/usr/sbin/cronolog /var/log/httpd/my.examplehost.com/access_log-%Y%m%d" common

我正在考虑创建一个 cron 脚本,它只是说

gzip /var/logs/httpd/my.examplehost.com/*

但是,这是否也会尝试压缩 apache 当前正在写入的文件?在 cronolog 主页上,只提到您应该在 cron 作业或类似作业上写入,但没有说明如何执行此操作。

答案1

Logrotate 确实是完成这项工作的工具,但如果你不能使用它,那么你可以 使用find参数-ctime

find /var/logs/httpd/my.example.host.com/ -ctime +0 -not -name '*.gz' -exec gzip {} \; 

应该按照您想要的方式操作,因为它会找到 24 小时前更改且尚未压缩的文件并对其进行压缩。

为了确保你正在处理的文件没有打开,你可以这样做

#!/bin/bash
for file in $(find /var/logs/httpd/my.example.host.com/ -ctime +0 -not -name '*.gz')
do
    lsof | grep $file
    if [$? -eq 1 ]
    then
        gzip $file
    fi
done

相关内容