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
}
Важно:
/path/to/logs/*.log
меняем на директорию с логами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