У меня есть каталог журналов, в который записывает мое приложение. Он создает такой файл журнала:
2015-01-22-10-full-activity.log
2015-01-22-11-full-activity.log
2015-01-22-12-full-activity.log
2015-01-22-13-full-activity.log
Я хочу сжать каждый файл, кроме самого последнего, и удалить любой файл старше 3 дней.
Я думал, что logrotate сможет сделать это за меня, но я не мог понять этого, и, возможно, это потому, что я называю свой журнал активности, указав время в его имени.
Любые идеи?
Если вы уже создаете файлы с датой в имени, logrotate - не ответ; он основан на идее о том, что приложение всегда записывает в один и тот же файл журнала (например, /var/log/app/output.log), а затем logrotate заботится о переименовании / сжатии файлов и сообщает приложению повторно открыть файл снова исходный целевой файл.
В этом случае, возможно, пара заданий cron, использующих "find" с -mtime, например:
1 0 * * * root find /path/to/logs/*.log -mtime +1 -daystart -exec gzip {} \;
2 0 * * * root find /path/to/logs/*.log.gz -mtime +3 -daystart -delete
Вы можете повозиться с числами в -mtime и использовать -daystart (или нет), чтобы получить точные результаты, которые вы хотите (зависит от того, как вы хотите подсчитать количество дней и т. Д.)