Я хочу запустить задание cron, которое удаляет старые записи в каталоге кеша, чтобы его общий размер уменьшился до определенного количества байтов. Я придумал эту однострочную команду оболочки, но мне было интересно: есть ли стандартный инструмент Linux (например, logrotate для ротации журналов), который делает то же самое?
Oneliner выглядит следующим образом:
find /some/cache/dir -type f -printf "%T@ %s %p\n" | sort -rn | awk '{ s += $2 ; if (s > 100000) print $3 }' | xargs rm
Я использую find для сбора метки времени, размера файла и пути к каждому файлу. Затем я сортирую по метке времени, сначала самые новые файлы. Затем я вычисляю совокупный размер файла, выводя файлы только после достижения определенного предела. Затем полученные файлы удаляются.
Я никогда не видел «стандартного» способа сделать это - потому что не существует «стандарта», когда дело доходит до того, как приложения кэшируют контент: продолжительность, общее используемое пространство и т. Д. Все зависит от конкретных методологий кэширования данного инструмента.
Что происходит, когда вы «обрезаете» то, что в настоящее время используется? Просто потому, что что-то было кэшировано некоторое время назад, это не значит, что это все еще не раздается ... и его легко можно было раздать пока вы пытаетесь его удалить - а это плохая жужжу.
В подавляющем большинстве случаев вам следует использовать диспетчер конфигурации приложения (будь то файл конфигурации, база данных и т. Д.) Для управления собственной стратегией кэширования.
Я могу назвать хотя бы один товар, где файл имена cached не имеют абсолютно никакого отношения к файлы сами: и только потому, что он был кэширован месяц назад, не означают, что он еще не используется, потому что приложение не обновляет временные метки в кешированных файлах - никогда. Он отслеживает внутри себя наименее недавно использованный доступ, а способ управления размером кеша - ограничить точку раздела / монтирования, в которой размещен кеш (поскольку он будет использовать до и включая все пространство, доступное в его каталоге кеша).
Не редактируйте кеши приложений, если вы действительно знать, что произойдет, когда вы это сделаете.