Tomcat 8.5.64运行时删除tomcat/temp下旧.tmp文件是否安全?
问题解决:Tomcat Temp目录自动清理失效的处理方案
问题背景
我们的Tomcat服务器tomcat/temp目录自带的自动清理功能失效,导致磁盘空间被占满。这些占用空间的临时文件均来自用户文件上传操作,且留存超过两天的旧临时文件已无使用价值。
处理思路
实现一个每两天执行一次的定时任务,主动清理目标目录:
- 仅针对
.tmp文件执行删除操作,规避误删tomcat.pid等非临时文件的风险 - 尽管通常服务器关闭时清理
temp目录是绝对安全的方案,但考虑到旧临时文件已无用处,选择在Tomcat运行期间定向清理过期.tmp文件,平衡空间释放需求与运行安全
Java 8 实现代码
public static void removeAllTemporaryFiles(TempFilePaths chosenFilePath) { Date ageLimit = DateHelper.addToDate(DateHelper.today(), -2, TimeUnit.DAYS); String filePath = null; IOFileFilter fileFilter = null; switch (chosenFilePath){ // 其他分支 case TOMCATTEMP: filePath = PathMapper.getInstance().getPath("tomcatTemp", "unknown").toString(); fileFilter = new AndFileFilter(new AgeFileFilter(ageLimit, true), new WildcardFileFilter("*.tmp")); break; // 其他分支 } if (FileHelper.exists(filePath)) { Collection<File> filesToDelete = FileUtils.listFiles(new File(filePath), fileFilter, TrueFileFilter.INSTANCE); int numberOfFilesToBeDeleted = filesToDelete.size(); int filesDeletedCounter = 0; for (File fileObject : filesToDelete) { try { fileObject.delete(); filesDeletedCounter++; } catch (Exception e) { log.error(e); } } log.info("Temporary files deleted @ " + filePath + ": " + filesDeletedCounter + "/" + numberOfFilesToBeDeleted); } }
代码说明
- 过滤规则:通过
AndFileFilter组合两个过滤器,精准筛选出修改时间早于两天前的.tmp文件 - 路径配置:借助
PathMapper动态获取Tomcat Temp目录路径,提升代码的配置灵活性 - 异常处理:遍历删除文件时捕获异常,避免单个文件删除失败导致整个任务终止,同时记录清理日志便于后续排查
内容的提问来源于stack exchange,提问作者snek
相关产品推荐
相关产品推荐

