Любой программист или системный администратор прекрасно понимает, насколько важно ведение логов системы. Все работает, логи пишутся. Но если это дело не контролировать, то файлы со временем разрастаются до удручающих размеров и количеств. Для контроля логов - ротации - существует утилита logrotate. Что она делает? Эта утилита по заданным параметрам архивирует логи и складывает их туда, куда необходимо, а также управляет количеством бэкапов для каждого log-файла. Это вкратце. Подробнее можно почитать в

man logrotate

Итак, допустим, мы имеем какой-либо программный продукт, который круглосуточно одаривает нас подробными логами. Их наличие нам необходимо для анализа и наблюдения за работой системы, и мы хотим прибегнуть к их ротированию. Как это сделать при помощи logrotate?

Итак, я буду “говорить” за Ubuntu, и, надеюсь, за Debian.

Конфигурационные файлы logrotate размещаются в директории

/etc/logrotate.d/

Это типичное расположение конфигурационных файлов. Оно описывается в основном конфиге в строчке

include /etc/logrotate.d

Естественно, все это дело можно изменить. Но, я сейчас не об этом. Допустим, у меня есть директория, в которую сваливается кучка log-файлов с расширением (это которое file extension) .log. Мне необходимо ротировать логи ежедневно, при этом сжимать их и отправлять в определенную директорию. Как это сделать? Скачем в директорию /etc/logrotate.d/, создаем в ней файл с понятным нам именем, открываем его редактором (конечно делать все это надо из под root) и пишем примерно следующее:

/<путь>/<до>/<логов>/*.log {
    daily
    missingok
    rotate 28
    compress
    nodelaycompress
    notifempty
    create 640 user group
    olddir /var/log/<директория с логами>
}

Итак, что здесь что означает:

  • daily — периодичность ротации “ежедневно”, может быть, например monthly — ежемесячно;
  • missingok — данный параметр сообщает утилите, что отсутствие лога не является ошибкой;
  • rotate 28 — параметр определяет сколько фрагментов одного лога хранить. в Данном случае я указал, чтобы хранилось 28 фрагментов каждого лога, по одному фрагменту на день;
  • compress — параметр определяет, сжимать логи или нет;
  • nodelaycompress — не откладывать сжатие фрагмента на следующий цикл ротации;
  • notifempty — не ролировать лог, размер которого 0 байт;
  • create 640 user group — с какими правами доступа и какого пользователя с группой делать владельцем лога;
  • olddir /var/log/<директория с логами> — директория, в которую будут складываться сжатые фрагменты логов.

Я не указал еще несколько параметров, таких, как, например, size — размер log-файла. Параметр позволяет ротировать логи не по временному промежутку, а по размеру логов. Подробнее можно прочитать в

man logrotate

После конфигурирования имеет смысл выполнить

logrotate -f

для принудительного запуска утилиты. Это полезно, если вы создали новые записи в конфигах logrotate.

Вот и всё, держите ваши файлы в порядке ;).