Назад | Перейти на главную страницу

Сжать журналы, повернутые с помощью cronolog

У меня есть несколько серверов (Centos 5.x) с Apache, журналы которых вращаются с помощью cronolog. Какова наилучшая стратегия для автоматического сжатия и удаления этих журналов через определенное время? CustomLog "| / usr / sbin / cronolog /var/log/httpd/my.examplehost.com/access_log-%Y%m%d" общий

Я думал о создании скрипта cron, который просто говорит

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

Но не пытается ли это также сжать файл, в который в настоящее время пишет apache? На домашней странице cronolog есть только упоминание о том, что вам следует писать свои задания в cron или аналогичные, но нет инструкций о том, как это сделать.

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