Моя конфигурация Apache logrotate выглядит так:
/var/log/http/*log {
monthly
dateext
dateformat .%Y.%m
[... rest stripped for brevity ...]
}
Это отлично работает, за исключением того, что дата в повернутом имени файла на один период позже, чем период, фактически охваченный журналами, например error_log.2012.09
охватывает период с 01.08.2012 по 31.08.2012.
Я понимаю, что есть и другие варианты для Apache (например, cronolog), но у меня есть куча других журналов, которые мне также нужно вращать, и logrotate - это именно то, что мне нужно, помимо этой единственной проблемы.
Есть ли способ заставить logrotate использовать смещение даты - или, что еще лучше, вычислить предыдущий период времени - при генерации повернутого имени файла?
Добавлено в 3.8.0 (хотя, глядя на историю svn, похоже, что на самом деле он был добавлен в 3.7.9):
http://svn.fedorahosted.org/svn/logrotate/tags/r3-8-0/CHANGES
- added "dateyesterday" option (see man page)
если logrotate в вашем дистрибутиве еще не имеет опции dateyesterday, вы можете использовать следующий сценарий:
LOGFILE="$1"
LOGMTIME="$(env LC_ALL='C' stat $LOGFILE |awk '/^Modify/{print $2}')"
LOGSTART=$(( $(date +%Y%m%d -d "${LOGMTIME}") - 1 ))
mv $LOGFILE ${LOGFILE%-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]}-$LOGSTART
Ноты: