Конфигурационный файл по умолчанию — /etc/logrotate.conf, а индивидуальные правила ротирования логов для сервисов хранятся в директории /etc/logrotate.d
Пример
/var/log/name_service/* { rotate 30 size=10M missingok notifempty daily compress delaycompress maxage 30 create 0644 root root postrotate /usr/bin/systemctl restart logstash-forwarder endscript }
- rotate 30 — хранить последние 30 ротированных файлов. Остальные удалять.
- size=10M — пока размер лог-файла не превысит 10 мегабайт, он не будет ротироваться.
- missingok — если файла не существует, не выкидывать ошибку.
- notifempty — если файл пустой, не выполнять никаких действий.
- daily — делать ротацию каждый день.
- dateyesterday – вчерашнюю дату при ротации
- dateext – ставить дату вместо номера
- compress — сжимать ротированные файлы.
- delaycompress — сжимать только предыдущий журнал. Позволяет избежать ошибок, связанных с отсутствием доступа к используемому файлу.
- maxage 30 — хранить ротированные файлы за последние 30 дней. Остальные удалять.
- copytruncate – Создать копию оригинального log-файла, а потом его ‘обнулить’. Таким образом сам файл не удаляется и не меняется его дескриптор. Несовместимость: create
- create 0644 root root — создать новый лог-файл после ротирования.
- postrotate … endscript — скрипт, который необходимо выполнить после чистки лога.
* /var/log/name_service/* — путь к файлу, который нужно ротировать. * указывает, что нужно чистить все файлы, которые расположены в каталоге /var/log/name_service/
Пример для ulog-acctd
/var/log/ulog-acctd/account.log /var/log/ulog-acctd/debug.log { daily rotate 50 copytruncate compress notifempty dateyesterday #вчерашнюю дату при ротации #dateext #ставить дату вместо номера missingok sharedscripts prerotate if [ -e /var/run/ulog-acctd.pid ]; then kill -TSTP `cat /var/run/ulog-acctd.pid`; fi endscript postrotate if [ -e /var/run/ulog-acctd.pid ]; then kill -CONT `cat /var/run/ulog-acctd.pid`; fi endscript }
Предварительная ротация (проверка/отладка)
В первую очередь проверьте что произойдет, когда вы принудительно запустите logrotate (без изменений в файловой системе):
$ logrotate -vdf CONFIG_FILE
с выводом в файл:
# /usr/sbin/logrotate -d /etc/logrotate.conf 2> /tmp/logrotate.debug
Принудительный запуск logrotate:
$ logrotate -vf CONFIG_FILE
Опции передаваемые команде logrotate:
-d, –debug Запустить logrotate в режиме отладки (пробный прогон).
-f, –force Принудительно запустить logrotate.
-v, –verbose Показать больше информации.
С помощью опции -f, –force, logrotate произведет принудительную ротацию файлов, даже если они не попадаю под определенные критерии, как minsize, age и т.п.