Як налаштувати logrotate, щоб не видаляти мої файли журналу після обертання?


24

Є спосіб це зробити?


Чи можете ви сказати нам, чому ви хочете це зробити? Можливо, є й інші варіанти ...
chmeee

У моєму випадку було б непогано завантажувати великі старі журнали у зовнішнє сховище та зберігати нові на сервері. Тому мені потрібен простий роздільник журналу.
Секрет

2
Моїм випадком використання для цієї конфігурації є: я хочу зберігати свій журнал назавжди, оскільки він мені може знадобитися для аудиторських цілей, АЛЕ я хочу, щоб мої файли поверталися так, щоб поточний журнал не став занадто великим, а обертові - бути стислий - інакше резервне копіювання журналів на зовнішній сервер є надто складним, а перевірка файлів також стає занадто повільною.
Рудольф Майєр

Відповіді:


32

У своєму logrotate.conf (або еквівалентному файлі logrotate.d) змініть рядок із написом "

rotate 10

(ваш номер може бути різним) до більшої кількості. Це дозволить зберегти стільки днів журналів. Ви можете зробити це 36500, що прослужило б вам 100 років.


6
Коли я робив це на малиновому пі (расьпіані), воно змушувало заморожувати щовечора. Одного разу я задумався запускати процеси та відкривати файли за допомогою послідовної консолі та виявив, що вона намагається перейменувати 100000 неіснуючих файлів. Тож остерігайтеся цього. На жаль, у мене немає більш детальної інформації
Christian

0

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

Використовуйте опцію копіювання. З посібника:

copy

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


Це те саме, що коментар нижче ( serverfault.com/a/50186/275485 ), і не дає правильної відповіді; копія не означає, що ваші старі файли, які були повернуті, не видаляються ..
Рудольф Майєр

-3

Відміняючи точку, що обертання включає видалення ... ;-)

Схоже, ви можете просто додати слово "копіювати" у відповідний файл (ймовірно, у /etc/logrotate.d). Наприклад, сценарій apache2 logrotate виглядатиме так:

/var/log/apache2/*.log {
    щотижня
    пропуск
    обертати 52
    компрес
    затримка компресу
    notifempty
    копія
    спільні сценарії
    стропати
        if [-f "`. / etc / apache2 / envvars; echo $ {APACHE_PID_FILE: - / var / run / apache2.pid} `"]; потім
            /etc/init.d/apache2 reload> / dev / null
        фі
    закінчення
}

Спробуйте це і подивіться, чи це робить те, що ви хочете.


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

Саме так, я вважав, що він просить. Він спеціально попросив спосіб "не видалити мої файли журналів", а не спосіб "не видалити старі архіви моїх журнальних файлів". Здогадуюсь, я повинен бути більш обережним щодо питань, які стосуються лише предмета, а не тіла ;-)
Джастін Еллісон

2
Фраза «після обертання» дає підказку.
Призупинено до подальшого повідомлення.

4
"Відміняючи точку, що обертання передбачає видалення ..." Не обов'язково. Обертання може передбачати просто стискання старих журналів та збереження їх, ось що, здається, питання задається.
reflexiv
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.