Век живи, век учись. Неожиданно обнаружил, что logrotate не удаляет старые файлы.
К примеру, есть конфигурация для ротации логов nginx:
/var/log/nginx/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
У нас будут ротироваться логи nginx, будет храниться 30 файлов, а последний будет удаляться. Внимание: "последний", а не последний и все что старше.
К примеру, вы хотите хранить логи только 7 дней, изменяете конфиг на:
/var/log/nginx/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
Отлично, при ротации у вас удалится восьмой файл, а девятый, десятый и т.д. до тридцатого файла останутся и ничего с ними не произойдёт.
Казалось бы, есть опция maxage 7
, однако, проблема та же. Опция касается только ротируемых файлов, а те, что не попадают в диапазон, удаляться не будут.
Что делать? Удалять вручную:
/var/log/nginx/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
find /var/log/nginx -type f -name "*.gz" -mtime +7 -delete
endscript
}