Як я можу обертати багато файлів журналу в інший підкаталог за обертання?


12

У мене є каталог з багатьма файлами журналів, які я хотів би обертати щодня. Для організаційних цілей я хотів би мати можливість переміщати повернені журнали в інший каталог (або підкаталог), названий за датою, зберігаючи останні тижні журналів.

Я можу використовувати logrotate для досягнення більшої частини цього, обертаючи файли на місці або навіть переміщуючи їх до однієї іншої каталогів за допомогою olddirдирективи, але у мене виникають проблеми з пошуком рішення для створення окремих підкаталогів за обертання. Як я можу цього досягти?

Logs to rotate: /var/log/example/*

Desired target directories (keeping a week):
    /var/log/example/20121006/*
    [ ... ]
    /var/log/example/20121012/*

Відповіді:


9

Ви повинні мати можливість викликати зовнішній скрипт у postrotateдирективі:

postrotate
  /path/to/your.sh
endscript

і щоб цей сценарій рухався, наприклад:

#!/bin/bash

newdir=/var/log/example/`date +%Y%m%d`

mkdir $newdir
mv /var/log/example.1.gz $newdir

find /var/log/example -mindepth 1 -maxdepth 1 -mtime +7 \
  -type d -print0 | xargs -0 rm -rf

Однак може бути простіше просто використовувати dateextдирективу. При цьому повернені файли будуть додані часовою позначкою (хоча і не переміщені в інший каталог).

Детальну logrotate(8)інформацію про обидві директиви див.


Здається, postrotateце зробить трюк. Єдине, що мені потрібно додати - це очищення старих каталогів, які перевищують певну кількість чи старше певної дати.
Дейв Forgac

1
Дивіться оновлену відповідь. find | xargsКоманда повинна видалити все безпосередні підкаталоги , /var/log/exampleякщо вони були змінені в останній раз більше 7 днів тому.
Ansgar Wiechers

1

У вас є olddirдиректива, яку ви можете використовувати в конфігураційному файлі.

З документації:

olddir
Журнали переміщуються в каталог для обертання. Каталог повинен знаходитись на тому ж фізичному пристрої, що і обертовий файл журналу, і вважається, що він буде відносно каталогу, що містить файл журналу, якщо не вказано абсолютне ім'я шляху. При використанні цього параметра всі старі версії журналу закінчуються в каталозі. Ця опція може бути замінена noolddirопцією.

Довідка : https://manpages.debian.org/jessie/logrotate/logrotate.8.en.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.