Как настроить logrotate, чтобы он не удалял мои файлы журналов после ротации?


24

Есть способ сделать это?


Можете ли вы сказать нам, почему вы хотите это сделать? Возможно есть другие варианты ...
Chmeee

В моем случае было бы неплохо загрузить большие старые журналы на внешнее хранилище и сохранить новые на сервере. Поэтому мне нужен простой сплиттер журнала.
сентября

2
Мой вариант использования для этой конфигурации: я хочу сохранить свой журнал навсегда, так как он может понадобиться для целей аудита, НО я хочу, чтобы мои файлы вращались так, чтобы текущий журнал не становился слишком большим, а повернутые могли быть сжатые - в противном случае резервное копирование журналов на внешний сервер слишком сложно, а проверка файлов также становится слишком медленной.
Рудольф Майер

Ответы:


32

В файле logrotate.conf (или в эквивалентном файле logrotate.d) измените строку с надписью «

rotate 10

(ваш номер может отличаться) на большее число. Это скажет это, чтобы сохранить то много дней журналов. Вы можете сделать это 36500, что будет длиться 100 лет.


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

0

Я искал это для того, чтобы чередовать резервные копии моей базы данных ежедневно, еженедельно и ежемесячно; поэтому я чередую файл ежедневно, но сохраняю файл для еженедельной ротации, и то же самое для годовой ротации.

Используйте опцию копирования. Из руководства:

copy

copy Сделайте копию файла журнала, но не меняйте оригинал. Эту опцию можно использовать, например, для создания снимка текущего файла журнала или когда какой-либо другой утилите необходимо усечь или проанализировать файл. Когда эта опция используется, опция создания не будет иметь никакого эффекта, так как старый файл журнала остается на месте.


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

-3

Отложив точку, что вращение включает в себя удаление ... ;-)

Похоже, вы можете просто добавить слово «copy» в соответствующий файл (скорее всего, в /etc/logrotate.d). Например, скрипт apro2 logrotate будет выглядеть так:

/var/log/apache2/*.log {
    еженедельно
    missingok
    повернуть 52
    компресс
    delaycompress
    notifempty
    копия
    sharedscripts
    postrotate
        if [-f "`. / etc / apache2 / envvars; echo $ {APACHE_PID_FILE: - / var / run / apache2.pid} `"]; тогда
            /etc/init.d/apache2 reload> / dev / null
        фи
    endscript
}

Попробуйте, и посмотрите, будет ли это то, что вы хотите.


2
Предполагая, что он хочет, чтобы файлы были «повернуты», но никогда не удалял старые файлы, этого не произойдет. Добавление «копии» в раздел конфигурации означает, что исходный файл будет продолжать расти вечно, но в конечном итоге старые копии файла будут удалены. Насколько я понимаю, «копирование» в первую очередь полезно, когда вы ожидаете, что какой-то другой процесс урежет / удалит оригинал.
Insyte

Именно то, о чем я думал, он просил. Он специально попросил способ «не удалять мои файлы журналов», а не «не удалять старые архивы моих файлов журналов». Думаю, мне следует быть более осторожным с вопросами, которые касаются только темы, а не тела ;-)
Джастин Эллисон,

2
Фраза «после вращения» дает ключ к разгадке.
Приостановлено до дальнейшего уведомления.

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