У меня есть несколько серверов (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