Я пытаюсь настроить logrotate в RHEL для журналов tomcat6. В настоящее время logrotate отлично работает с журналом catalina.out, он правильно вращается и сжимается.
Проблема заключается в файлах с датой, например:
catalina.2012-01-20.log
catalina.2012-01-21.log
catalina.2012-01-22.log
Эти файлы не вращаются. Я понимаю, что мне нужно настроить их в файле /etc/logrotate.d/tomcat6, где настроено вращение для catalina.out. Но я не могу его настроить.
Все, что я хочу, - это ежедневное сжатие этих старых файлов, кроме файла журнала текущей даты.
Кто-нибудь может мне помочь, пожалуйста !!
Спасибо Номан А.
Примерно так в /etc/cron.d/rotate_tomcat_logs:
# delete every log file over 100 days old, and compress every log file over 1 day old.
00 1 * * * root ( find /opt/tomcat/logs -name \*log\* -name \*.gz -mtime +100 -exec rm -f {} \; >/dev/null 2>&1 )
05 1 * * * root ( find /opt/tomcat/logs -name \*log\* ! -name \*.gz -mtime +1 -exec gzip {} \; >/dev/null 2>&1 )
Вероятно, вы можете удалить дату из имен файлов журнала, как описано в Как удалить шаблон даты из журналов tomcat , чтобы иметь возможность использовать правила logrotate.
Это сработало для меня, по крайней мере, для журнала локального доступа.
Чтобы включить дату в повернутый файл, вы, вероятно, можете использовать опцию dateext.
$ cat logrotate.conf
/var/nginx/logs/access.log {
size 10k
copytruncate
dateext
rotate 10
compress
}
Повернутый файл должен быть создан, как показано ниже
root@nitpc:~# ls -lrt /var/nginx/logs/access.*
-rw-r--r-- 1 nginx root 5422 May 31 08:26 access.log
-rw-r--r-- 1 nginx root 466 May 31 08:26 access.log-20180531.gz
Единственный недостаток - вы не сможете запускать его чаще, чем один раз в день, так как файл будет иметь определенное имя для этой даты.
Приведенный выше пример взят из моего док-контейнера Nginx, запущенного в k8s на GC. Версия logrotate - 3.11.0.
Надеюсь, что это помогает!
Обновление: со справочных страниц https://linux.die.net/man/8/logrotate
dateformat строка формата
Укажите расширение для dateext, используя нотацию, аналогичную функции strftime (3). Допускаются только спецификаторы% Y% m% d и% s. Значение по умолчанию -% Y% m% d. Обратите внимание, что символ, отделяющий имя журнала от расширения, является частью строки dateformat. Для правильной работы% s системные часы должны быть установлены после 9 сентября 2001 года. Обратите внимание, что метки даты, сгенерированные этим форматом, должны быть лексически сортируемыми (то есть сначала год, затем месяц, а затем день. Например, 2001/12/01 в порядке, но 01/12/2001 нет, поскольку 01/11 / 2002 год будет отсортирован ниже, а потом). Это связано с тем, что при использовании параметра rotate logrotate сортирует все повернутые имена файлов, чтобы выяснить, какие файлы журналов старше и должны быть удалены.
В файле ротации журналов используйте rotate #
, где # - количество журналов, которые вы хотите сохранить, прежде чем удалять их.
rotate count
Файлы журнала вращаются несколько раз перед удалением или отправкой по адресу, указанному в почтовой директиве. Если число равно 0, старые версии удаляются, а не поворачиваются.