В настоящее время я смотрю на размер файлов моих журналов Apache, поскольку они стали огромными. В моей конфигурации logrotate у меня есть delaycompress
включен. Действительно ли это нужно Apache (поскольку в документации logrotate сказано, что некоторые программы все еще записывают в старый файл) или безопасно ли отключить delaycompress
?
Вот моя конфигурация logrotate:
/var/log/apache2/*.log {
weekly
missingok
rotate 26
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
if [ -f /var/run/apache2.pid ]; then
/etc/init.d/apache2 restart > /dev/null
fi
endscript
}
Если вы выполняете перезапуск Apache (или даже «изящно»), он закроет дескрипторы открытых файлов и откроет их снова. Вам не понадобится delaycompress, потому что файл будет закрыт и снова открыт как часть вашего перезапуска postrotate.
rotate access_log -> access_log.1 (rename action, no INODE change)
apache still writing to access_log.1 (same open FD on same INODE)
apache restart (close FD, release INODE writing)
apache writing to access_log (new FD to a new INODE)
Перезагрузка - плохая идея - что, если файл конфигурации случайно изменился и больше не действителен? Ваш apache не запускается. Вместо этого отправьте HUP родительскому процессу, который сообщает ему закрыть / повторно открыть дескрипторы файлов.
postrotate
/bin/kill -HUP `cat /var/run/apache2.pid 2>/dev/null` 2>/dev/null || true
endscript
cat завершится ошибкой, если PID отсутствует (или пуст, или недействителен), что приведет к сбою kill, поэтому вам не нужен if..then
блок вокруг него.
Хм, в данном случае, наверное, так как Apache держит логи открытыми.
Вы можете попробовать rotatelogs
сценарий. Это часть apache2-utils
пакет, по крайней мере, здесь, на моей рабочей станции Ubuntu. Другой подход - чередовать их ежедневно, а не еженедельно, чтобы вы меньше буферизовали перед сжатием.