Ротация логов по размеру
Есть настройка logrotate для ротации логов при достижении ими 1GB. Но автоматически логи не ротируются при достижении ими нужного объема.
Я так понимаю надо cron задействовать (запуск нужного конфига logrotate каждые 5 минут), но как как сделать так, чтобы это не порушило работу других конфигов logrotate, которые запускаются раз в сутки?
Куда и как прописывать?
конфиг /etc/logrotate.d/customizer_generator
/storage/logs/customizer_generator/*.log {
size 1G
sharedscripts
rotate 31
delaycompress
compress
compresscmd /usr/bin/pigz
compressoptions -p2
postrotate
test -s /run/syslogd.pid && kill -HUP $(cat /run/syslogd.pid)
# postrotate script should always return 0
true
endscript
}
Ответы (1 шт):
man logrotate
size size Log files are rotated only if they grow bigger than size bytes. If size is followed by k, the size is assumed to be in kilobytes. If the M is used, the size is in megabytes, and if G is used, the size is in gigabytes. So size 100, size 100k, size 100M and size 100G are all valid. This option is mutually exclusive with the time interval options, and it causes log files to be rotated without re- gard for the last rotation time, if specified after the time criteria (the last specified option takes the precedence).
Правила, основанные на size не зависят от времени последнего запуска. Т.е. если к моменту запуска, размер достиг настроенной ёмкости, будет произведено ротирование.
Таким образом, осталось лишь запускать logrotate чаще. Правила основанные на временных интервалах(daily, hourly) при этом будут вести себя так же, как и раньше.
Сегодня, большинство дистрибутивов основано на systemd. В таких системах не нужно использовать cron для запуска logrotate:
$ cat /usr/lib/systemd/system/logrotate.timer
[Unit]
Description=Periodic rotation of log files
Documentation=man:logrotate(8) man:logrotate.conf(5)
[Timer]
OnCalendar=*:0/5
AccuracySec=1s
Persistent=true
[Install]
WantedBy=timers.target