![使用 cronolog 压缩轮换日志](https://linux22.com/image/591110/%E4%BD%BF%E7%94%A8%20cronolog%20%E5%8E%8B%E7%BC%A9%E8%BD%AE%E6%8D%A2%E6%97%A5%E5%BF%97.png)
我有一堆装有 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