Как сжать и убрать журналы с logrotate, но не повернуть их

Следует иметь в виду ограничения системы (систем), управляющей базами данных SVN. У них могут быть пределы, такие как число пользователей или проблем масштабируемости с количеством используемых файлов или каталогов. Например, фс Linux ext3 может искать каталоги линейно, которые могут быть проблемой с миллионами repos. Могут быть другие пределы, такие как число пользователей, зарегистрированных в системе. Исследуйте эти области и тест при необходимости.

Ре: тестирование. Вы могли использовать сценарий оболочки для генерации стольких пользователей, сколько Вы ожидаете использовать. Затем используйте другой сценарий для генерации repos для каждого пользователя со столькими файлами, сколько Вы обычно ожидали бы. Создание комплекта комплексного испытания выходит за рамки, который может быть представлен здесь. Надежда, которая получает Вас на Вашем пути.

10
задан 15 March 2011 в 14:16
6 ответов

Довольно простой, что я видел работы как это.

Создайте файл в/etc/logrotate.d, названном котом, содержащим следующий:-

/var/log/tomcat/catalina.out { 
  copytruncate 
  daily 
  rotate 7 
  compress 
  missingok 
}

Это ежедневно работает, сжимает файл и сохраняет ценность 7 дней (вращайтесь 7). copytruncate означает, что это скопирует затем усеченный исходный файл так, чтобы не было никакой потребности перезапустить кота. пропавшие без вести хорошо не будут ошибка, если это не будет там.

Клапан access.log может быть изменен для не вращения путем добавления rotatable=false:-

<Valve className="org.apache.catalina.valves.AccessLogValve
     ...
     ...
     suffix="log" rotatable="false" />
16
ответ дан 2 December 2019 в 22:03

Я не хотел изменять конфигурацию Tomcat, поэтому был создан сценарий, который сжимал повернутые файлы

#!/bin/bash
#
# TPP 2013-02-21
#
# Tomcat apps use a variety of loggers, mostly log4j.
# These rotate, conflicting with logrotate, the unix log rotation system. 
#
# Some files eg catalina.out
# are rotated to a backup containing a date eg catalina.2013-01-06.log
# which can then be compressed with bz2 to catalina.2013-01-06.log.bz2
#

cd /var/log/tomcat6

# 2013-02-21
DATE=`date --rfc-3339=date`
YEAR=`date +%Y`

for f in $(find catalina* |grep -v bz2 |grep -v '$DATE' |grep $YEAR)
do
 echo "bzip2 $f" 
 bzip2 $f
done

# However others are active whilst containing a date
# so we will find all and not compress the most recent
for l in 'localhost*' 'opt-db*' 'opt*' 'host-manager*' 'manager*'
do
 export previous=
 for f in $(find $l |grep -v bz2 |sort)
 do
  if [ "${previous}" != "" ]
  then
    echo "bzip2 ${previous}" 
    bzip2 $previous
  fi
  export previous=$f
 done
done

exit 0

1
ответ дан 2 December 2019 в 22:03

Измененный сценарий TimP - Добавлено удаление очень старых файлов, добавлено сканирование старых сжатых файлов.

#!/bin/bash
#
# TPP 2013-02-21
# RJK 2014-08-14
#
# Tomcat apps use a variety of loggers, mostly log4j.
# These rotate, conflicting with logrotate, the unix log rotation system.
#
# Some files eg catalina.out
# are rotated to a backup containing a date eg catalina.2013-01-06.log
# which can then be compressed with bz2 to catalina.2013-01-06.log.bz2
# or removed if older than a given number of days(MTIME).
#
cd /var/log/tomcat6
# 2013-02-21
DATE=`date --rfc-3339=date`
YEAR=`date +%Y`
MILLENIUM=20
# 2014-08-14
MTIME=14
# 2014-08-14
#for f in $(find catalina* |grep -v bz2 |grep -v '$DATE' |grep $YEAR)
for f in $(find catalina* |grep -v bz2 |grep -v '$DATE' |grep $MILLENIUM)
do
 # 2014-08-14
 if test `find $f -mtime +$MTIME`
 then
   echo "rm -f $f"
   rm -f $f
 else
   echo "bzip2 $f"
   bzip2 $f
 fi
done
# However others are active whilst containing a date
# so we will find all and not compress the most recent
for l in 'localhost*' 'opt-db*' 'opt*' 'host-manager*' 'manager*'
do
 export previous=
 for f in $(find $l |grep -v bz2 |sort)
 do
  if [ "${previous}" != "" ]
  then
    echo "bzip2 ${previous}"
    bzip2 $previous
  fi
  export previous=$f
 done
done
# 2014-08-14
for f in $(find *bz2)
do
 if test `find $f -mtime +$MTIME`
 then
   echo "rm -f $f"
   rm -f $f
 fi
done
exit 0 
2
ответ дан 2 December 2019 в 22:03

For local_access_log.YYYY-MM-DD.txt فشرده سازی این اسکریپت را پس از دیدن این پست نوشتم: -

#!/bin/bash
#
# If Tomcat uses server.xml config to rotate localhost_access_log,
# the daily rotated logs will need compressing and old ones deleted to stop filling
# the log partiton. Cannot use the system logrotate command as conficts with tomcat rotate
# therefore run this script in a daily cronjob
#
# localhost_access_log.2015-09-03.txt
#
# Add this script in /etc/cron.daily/ owned by root
#

CATALINA_BASE=`ps aux | grep catalina.base | awk -F'catalina.base\=' '{print $2}' | awk '{print $1}'`

if [ ! $CATALINA_BASE ]
then
    if [ -r /var/lib/tomcat8 ]
    then
        CATALINA_BASE=/var/lib/tomcat8
    else
        echo "Error: cannot find CATALINA_BASE"
        exit 1
    fi
fi

cd ${CATALINA_BASE}/logs

if [ $? -ne 0 ]
then
    echo "Error, cannot cd to logs directory, quitting...."
    exit 1
fi

# today's date (not to be gzipped)
DATE=`date --rfc-3339=date`
# number of days to keep
MTIME=28

# Compress all previous days uncompressed logs
for log in `ls localhost_access_log* | grep -v bz2 | grep -v $DATE`
do
    bzip2 $log
done

# delete old logs
find . -name "*.bz2" -mtime +$MTIME -exec rm {} \;

exit 0
0
ответ дан 2 December 2019 в 22:03

Здесь представлено простое решение. Это также включает опцию загрузки s3.

https://yottabrain.org/tomcat/tomcat-log-backup/

0
ответ дан 2 December 2019 в 22:03

Это на удивление просто. Просто скажите logrotate, какие файлы вы конкретно хотите повернуть. nocreate указывает logrotate не воссоздавать пустой файл после перемещения старого (если вы перемещаете файлы во вложенную папку).

/var/log/tomcat/catalina.out.* { 
  daily 
  nocreate
  compress 
  missingok 
}
1
ответ дан 2 December 2019 в 22:03

Теги

Похожие вопросы