我正在通过 cron 作业使用 Bash 脚本,在文件超过 5 分钟后立即将其删除。我有比这更好的方法吗?
是否有——也许——一种更有效地监控我的文件系统并在满足特定条件(例如“文件超过 5 分钟”)时获得回调的方法?
背景:我们的扫描仪不是很“智能”,只支持将扫描件上传到 FTP 服务器。虽然它不安全,但目前没有更好的方法来做到这一点。为了防止 FTP 服务器成为具有潜在价值的文档的宝库,我想在它们出现 5 分钟后立即将其删除。
第一个想法是每 5 分钟运行一次 cron 作业,只删除该目录中的所有文件。明显的缺点是,如果有人在 cronjob 运行之前扫描文档,他们就会丢失扫描结果。这可能不是问题,因为您可以重新扫描文档,但这很烦人。
下一个方法是每 5 分钟运行一次 cron 作业,检查文件是否超过 5 分钟,如果是,则将其删除。这将使文件的理论上最长寿命约为 10 分钟。它有效,但感觉有点像 hack。
那么有没有更好的办法呢?
在许多情况下,没有什么比调用 Bash 脚本的基本 cron 作业更好的了。
为什么您认为使用 cron 作业是一个“糟糕”的解决方案?除非此方法在您的系统上引起实际问题,否则将其更改为其他方法只会使本质上是一个简单过程的过程过于复杂。
世界上绝大多数系统都使用与此类似的 cron 作业。通过 Bash 和 cron 作业使用查找 100% 没问题。
就是说,这就是我如何处理您通过抢劫工作描述的任务的方式……
首先,你可以这样使用
find
:然后你可以像这样测试命令;换
rm -f
出ls -la
:这是专门查找路径中具有 PDF、JPG 和 TIFF 文件扩展名 ( )
-type f
的超过 5 分钟 ( ) 的文件 () ,仅在该目录 ( ) 中查找。-mmin +5
-regextype posix-extended -iregex '.*\.(PDF|JPG|TIFF)$
/path/to/the/files
-maxdepth 1
您可以根据需要添加其他文件扩展名,或者完全删除它以扫描目录中的任何内容。但是我不建议这样做,因为您冒着删除不应该删除的内容的风险;只需根据需要添加所需的扩展。
根据需要随意测试和调整。我建议将此代码放在 Bash 脚本文件中,然后通过 cron 作业运行该 Bash 脚本文件。是这样的:
你可能
inotifiywait
会被告知在某个目录中创建了一个文件,然后启动一个休眠 5 分钟的后台进程,然后擦除该文件。然而,这个解决方案不是很可靠,因为如果由于任何原因你错过了一个文件,它会永远留在磁盘上。基于的解决方案
find
最终将清除挥之不去的文件,即使由于某种原因运行失败。尝试
logrotate
。我相信您可以指定任意目录路径,允许它用于日志文件以外的其他内容。