использование logrotate для ротации журналов Apache

У меня есть мое приложение, работающее на apache tomcat. Я хотел настроить logrotate для журналов, которые создает apache.

Моя конфигурация logrotate выглядит следующим образом:

/var/company/apache-tomcat/logs/*.log /var/company/apache-tomcat/logs/*.txt {
    su root root
    copytruncate
    compress
    dateext
    dateformat -%s
    extension gz
    missingok
    notifempty
    rotate 90
    daily
}

Я только что понял, что мне не понадобится опция copytruncate для журналов apache, поскольку apache, похоже, каждый день создает новый файл журнала с добавленной к нему отметкой времени.

например: localhost.2016-02-26.log

Я хочу, чтобы logrotate вошел и заархивировал предыдущие журналы и удалил их (сохранив только заархивированные файлы) и оставил текущий журнал как есть.

Приложение:

Только что узнал, что logrotate не подходит для вращения журналов, в которых есть временные метки. Я ищу способы заставить logrotate работать с такими журналами или другими утилитами ротации, которые больше подходят для ротации таких журналов.


person streetsoldier    schedule 12.05.2016    source источник


Ответы (1)


Я создал свой собственный bash-скрипт, который делает это за меня. Он запускается из задания cron и архивирует файлы шаблонов и удаляет файлы старше определенного количества дней:

#!/bin/bash
# Compress logs and run garbage collection

ME=$(basename $0)

usage() {
  echo "Usage:"
  echo "  $ME <log_path> <garbage_collection_days>"
  echo "Example:"
  echo "  $ME \"/path/to/logfile.log-???????\" 21"
  echo
}

# sanity checking
[[ $# -ne 2 ]] && usage && exit 1

file_pattern="${1}"
gc_days=$2

# compress logfiles that are older than one day
nice -n 10 find $file_pattern -mtime +1 -exec gzip {} \;

# garbage collection
find $(dirname $file_pattern)/*.gz -mtime +$gc_days -exec rm {} \;
person streetsoldier    schedule 27.05.2016