Я хочу сжать несколько файлов журнала с форматом имени abc.log.yyyy-MM-dd, а затем удалить сжатый файл журнала (abc.log.yyyy-MM-dd.gz) через x дней. Я не хочу logrotate для поворота файлов (т.е. создания новых файлов), я хочу, чтобы он сжимал и удалял сжатые файлы только через x дней.
Я пробовал использовать этот шаблон только для сжатия файлов:
Для сжатия файлов:
/var/log/management/abc.log.*[!.gz]
su x y
daily
nocreate
missingok
compress
dateext
dateformat
rotate 6 #If I don't provide this parameter, files are deleted as soon as they
are compressed
}
To delete compressed files after x days:
/var/log/management/abc.log.*.gz* {
su x y
daily
rotate x
maxage x
}
После двух выполнений logrotate результат будет следующим:
abc.log.2019-05-20.gz.1.gz
abc.log.2019-05-21.gz.1
abc.2019-05-22.gz
Сжатые и повернутые файлы снова сжимаются.
Может ли кто-нибудь указать точный шаблон регулярного выражения для имени файла, который следует использовать
Заменить
/var/log/management/abc.log.*[!.gz]
с участием
/var/log/management/abc.log.*[0-9]
Ваша комбинация dateext
с пустым dateformat
- хороший способ избежать лишних цифр в имени файла!
Когда кто-то еще находит этот ответ, важна следующая строка:
nocreate
И если вы хотите удалить эти файлы через 60 дней, используйте
postrotate
find /var/log/management -name "abc.log.*gz" -type f -mtime +60 -exec rm -f {} \;
endscript