Пример настройки ротации логов nginx

logrotate -- утилита, предназначенная для автоматизации обработки старых логов.

Пример ниже -- ротация логов nginx.

Заходим под root, создаем файл в директории /etc/logrotate.d/ , например /etc/logrotate.d/my:

/path/to/logs/*.log {
    monthly
    notifempty
    missingok
    rotate 5
    compress
    create 644 nginx root
    dateext
    dateformat -%Y-%m
    postrotate
        /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

Важно:

  1. /path/to/logs/*.log меняем на директорию с логами
  2. create 644 nginx root -- здесь nginx root это имя пользователя и группа в создаваемых файлах логов. скопируйте те, что создает ваш nginx

Запускаем с флагом -d (debug -- ничего не делать, протестировать) и -f (активировать ротацию не смотря на календарь)

logrotate -d -f /etc/logrotate.d/my

Ожидаем увидеть информацию, какие логи будут скопированы и куда. Если все норм, можно разлогиниваться и ожидать первого числа следующего месяца запакованные логи.

Разберем конфиг построчно:

/path/to/logs/*.log { # маска, по которой можно найти логи
    monthly  # ротировать первго числа каждого месяца
    notifempty # пропускать пустые логи
    missingok  # не считать отсутствующий лог ошибкой
    rotate 5 # держать по 5 файлов в ротации. т.е. для каждого лога будет еще 5 файлов за предыдущие 5 месяцев
    compress # сжимать ротируемые логи, в результате получится файл .gz
    create 644 nginx root # создать пустой файл лога
    dateext # добавить дату к имени файла архива
    dateformat -%Y-%m # определить формат типа 2019-04 (апрель 2019)
    postrotate # после ротации
        # пнуть nginx, чтобы он начал писать логи во вновь созданный файл
        /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true 
    endscript
}

Доп. инфа: rtfm

published 2019-04-03 13dagger