логротировать:удалить журналы tomcat/jboss старше n дней

StackOverflow https://stackoverflow.com//questions/21015112

Вопрос

Я не нашел решения для очистки старых журналов tomcat или jboss или любых других журналов с отметками времени:каталог.лог./сервер.лог..В основном эти журналы чередуются с помощью jboss следующим образом:server.log, server.log.20131201, server.log.20131203 и так далее.

Есть ли способ использовать logrotate для удаления журналов старше n дней?Я не хочу использовать find внутри postrotate или настраивать свойства ведения журнала jboss/tomcat.Я просто хочу знать, может ли logrotate добиться этого самостоятельно.Я знаю, что это не очень продуктивно, но я столкнулся с проблемой, на которую мне нужен ответ.

Это было полезно?

Решение

Если вы не хотите использовать find внутри postrotate, нет, ты не можешь.

logrotate рассматривает каждый экземпляр server.log вращаются Tomcat/JBoss как отдельный файл, и поскольку они уникальны, logrotate будет вращать их только один раз. maxage - директива, удаляющая повернутые журналы старше n дней – проверяется только в том случае, если файл журнала должен быть ротирован, так что maxage выполняется только один раз и не может отслеживать возраст файла.

Однако, если вы передумаете использовать find, logrotate может помочь вам упростить управление файлами журналов, созданными Tomcat и JBoss.Я использую его для сжатия и удаления старых файлов с помощью такого файла конфигурации:

/path/to/logs/server.log.????-??-?? {
    compress
    compresscmd /usr/bin/bzip2
    nocreate
    nodateext
    ifempty
    missingok
    rotate 1
    size 0
    start 0
    lastaction
        # Remove rotated files older than 180 days
        find /path/to/logs -name 'server.log.????-??-??.0.bz2' -mtime +180 -exec rm {} \;
    endscript
}

где:

  • rotate 1 и compress переименовать и сжать, скажем, server.log.20131201 к server.log.20131201.0.bz20 между меткой времени и .bz2 расширение происходит от start 0.
  • size 0 гарантирует, что файлы всегда переименовываются и сжимаются.
  • А lastaction блок удаляет ротированные файлы старше 180 дней.

Другие советы

LOGROTATE может управлять своими журналами, вращающими их и в конечном итоге сохраняя ограниченное количество повернутых журналов.Но AFAIK это может сделать это только для журналов, которые он удается напрямую.Если ваши журналы уже вращаются некоторыми другими агентами (I.e. Tomcat сам), Logrotate не может ничего делать, просто потому, что ничего не знает о вращении, выполненном чем-то еще.

Так что ответ нет, вы не можете использовать LOGROTATE, чтобы удалить журналы, не управляемые самим собой (и я думаю, даже не предназначен, чтобы сделать что-то в этом роде).

Вы можете поставить скрипт на /etc/cron.daily.Например:

cat /etc/cron.daily/tomcat-rotate-logs

#!/bin/sh

# erasing tomcat logs older then 7 days

for x in $(find /var/log/tomcat/ -type f -mtime +7);
do
       rm "$x";
       logger -t TOMCAT-ROTATE-LOGS "Erasing $x [done]"; 
done
.

или создайте конфигурацию logrotate.Например: CAT /ETC/LOGROTATE.D/TOMCAT

/var/log/tomcat/*.log {
        su tomcat tomcat
        copytruncate  
        daily  
        rotate 6  
        compress  
        missingok
}
.

"SU TOMCAT TOMCAT" - подставки для избежания ошибки logrotate по неправильным разрешениям

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top