是否有一个标准的工具来修剪缓存目录?

是否有一个标准的工具来修剪缓存目录?

我想运行一个 cron 作业来删除缓存目录中的旧条目,以便将其总大小减少到一定数量的字节。我编写了这个一行 shell 命令,但我想知道:是否有一个标准的 Linux 工具(如用于轮换日志的 logrotate)可以执行相同的操作?

原文如下:

find /some/cache/dir -type f -printf "%T@ %s %p\n" | sort -rn | awk '{ s += $2 ; if (s > 100000) print $3 }' | xargs rm

我使用 find 来收集每个文件的时间戳、文件大小和文件路径。然后按时间戳排序,最新文件优先。然后计算累计文件大小,仅在达到一定限制后才输出文件。然后删除输出的文件。

答案1

我从未见过这样做的“标准”方法——因为在应用程序如何缓存内容方面没有“标准”:持续时间、使用的总空间等都取决于给定工具的特定缓存方法。

当你“修剪”当前正在使用的东西时会发生什么?仅仅因为某个东西在一段时间前被缓存并不意味着它现在不会被分发……而且它很容易被分发尽管您正在尝试删除它 —— 而这会带来不祥之兆。

在绝大多数情况下,您应该使用应用程序的配置管理器(配置文件、数据库等)来管理其自己的缓存策略。

我至少可以命名一个产品,其中文件名称缓存与文件他们自己:仅仅因为它是在一个月前缓存的不是意味着它不再处于活跃使用状态,因为应用程序永远不会更新缓存文件的时间戳。它会跟踪其内部最近最少访问的内容,管理缓存大小的方法是限制缓存所在的分区/挂载点(因为它将使用缓存目录中可用的全部空间)。

不要编辑应用程序的缓存,除非你真的知道当你这样做时会发生什么。

相关内容