Файлы Logrotate с датой в имени файла

Я пытаюсь настроить 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. Но я не могу его настроить.

Все, что я хочу, - это ежедневное сжатие этих старых файлов, кроме файла журнала текущей даты.

Кто-нибудь может мне помочь, пожалуйста !!

Спасибо Номан А.

31
задан Noman Amir 22 January 2012 в 16:13
поделиться

4 ответа

Примерно так в /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 )
6
ответ дан 27 November 2019 в 22:02
поделиться

Вероятно, вы можете удалить дату из имен файлов журнала, как описано в Как удалить шаблон даты из журналов tomcat , чтобы иметь возможность использовать правила logrotate.

Это сработало для меня, по крайней мере, для журнала локального доступа.

1
ответ дан 27 November 2019 в 22:02
поделиться

Чтобы включить дату в повернутый файл, вы, вероятно, можете использовать опцию 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 сортирует все повернутые имена файлов, чтобы выяснить, какие файлы журналов старше и должны быть удалены.

3
ответ дан 27 November 2019 в 22:02
поделиться

В файле ротации журналов используйте rotate #, где # - количество журналов, которые вы хотите сохранить, прежде чем удалять их.

rotate count

Файлы журнала вращаются несколько раз перед удалением или отправкой по адресу, указанному в почтовой директиве. Если число равно 0, старые версии удаляются, а не поворачиваются.

0
ответ дан 27 November 2019 в 22:02
поделиться
Другие вопросы по тегам:

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