logrotate не удаляет старые файлы - глобальный сбой
Я озадачен этим. Любая помощь высоко ценится...!
Журналы в /var/log/HOSTS/cacheflow_access_log/ настроены для архивирования в /var/log/HOSTS/archived/cacheflow_access_log/ и сжатия. Это довольно большие файлы, поэтому их следует хранить только в течение 1 дня, чтобы Splunk или Sawmill могли суммировать их содержимое.
Журналы вращаются и сжимаются без проблем, но старые сжатые журналы не удаляются. Подробный вывод logrotate предполагает, что это проблема с glob. Он ищет в директории live, а не в директории архива? Если так, как я могу это исправить? Если нет, то WTF продолжается?!
Logrotate conf:
# logrotate configuration for syslog files
# global options
rotate 1
missingok
daily
compress
ifempty
dateformat -%Y%m%d
dateext
---SNIP---
/var/log/HOSTS/cacheflow_access_log/* {
daily
# only keep 1 day of cacheflow as they're massive files
maxage 1
rotate 1
olddir /var/log/HOSTS/archived/cacheflow_access_log
postrotate
invoke-rc.d proftpd restart 2>/dev/null >/dev/null || true
endscript
}
Logrotate подробный вывод:
considering log /var/log/HOSTS/cacheflow_access_log/CF_5000_20120803_092129.log
log needs rotating
rotating log /var/log/HOSTS/cacheflow_access_log/CF_5000_20120802_120326.log, log >rotateCount is 1
Converted ' -%Y%m%d' -> '-%Y%m%d'
dateext suffix '-20120803'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /var/log/HOSTS/cacheflow_access_log/CF_5000_20120802_120326.log to /var/log/HOSTS/archived/cacheflow_access_log/CF_5000_20120802_120326.log-20120803
running postrotate script
Запуск Debian Squeeze 2.6.32-5-686-bigmem
Я знаю, что в этой конфигурации есть ненужные дубликаты (например, вращение 1 не нужно повторять) - это было просто для того, чтобы убедиться, что проблема не была причиной этой проблемы.
Спасибо!
1 ответ
Возможно, это происходит сбой, потому что файл журнала уже содержит дату в имени, и поэтому это новое имя каждый день. Обычно я вижу файлы журналов со статическим именем, и logrotate добавляет расширение, чтобы сделать их уникальными. logrotate может искать старые файлы в каталоге архива с именем CF_5000_20120802_120326.log, чтобы удалить их. Он не находит ничего, потому что базовое имя каждого файла уникально.
Для будущих читателей эта строка находится в
logrotate.conf(5)
документы:
Пожалуйста, используйте подстановочные знаки с осторожностью. Если вы укажете
*
,logrotate
повернет все файлы, включая ранее повернутые. Способ обойти это - использоватьolddir
директива или более точный подстановочный знак (например,*.log
)