логротировать:удалить журналы tomcat/jboss старше n дней
-
21-12-2019 - |
Вопрос
Я не нашел решения для очистки старых журналов 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.bz2
.А0
между меткой времени и.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 по неправильным разрешениям