linux自动清理tmp临时文件导致的(The temporary upload location[/tmp/tomcat.]is not valid)问题

项目场景:

一个springboot项目,项目中有个自动生成word文档的功能。部署到inux上。看了看系统用的是中标麒麟的系统。但是系统内核应该是基于linux的。本地测试生成word功能没问题,部署上去原本也没问题,后来突然就不能用了。但是本地启动了又没问题,所以到服务器上看了看报错信息。


问题描述

报错信息:
每次调用生成文件功能都会有这个报错(某些项目里上传下载可能也会出这个报错)
org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.1146908504104468874.9007/work/Tomcat/localhost/tt] is not valid


原因分析:

从报错我们能看出,应该是/tmp/tomcat.1146908504104468874.9007/work/Tomcat/localhost/tt这个目录不存在导致的。这个目录是什么呢?
1.这个目录是一个tomcat的临时目录
2.springboot项目启动后会在tmp自动生成要用的临时目录
3.上传下载,或者涉及到一些文件操作的时候,springboot会用到这个目录
4.linux内核的操作系统,会清理tmp目录(不同的内核可能不同,有的是重启时候清理,有的是定时清理。总之就是这个文件会消失)。我用的系统是10天清理一次。所以才会出现,刚部署上去测试没问题,使用一段时间后出现问题的情况。就是因为tomcat的临时文件目录被清理了,导致找不到目录报错
5./tmp目录的清理规则主要取决于/usr/lib/tmpfiles.d/tmp.conf文件的设定。大家可以去看自己的清理规则
我的文件里是这样的。

# Clear tmp directories separately, to make them easier to override
# 清理/tmp目录下10天前的目录和文件
v /tmp 1777 root root 10d
# 清理/var/tmp目录下30天前的目录和文件
v /var/tmp 1777 root root 30d

解决方案:

可以分3种方式解决
1.重启springboot。因为springboot重启的时候会重新去生成这个目录。咱们就有目录用了
2.先重启springboot,然后修改/usr/lib/tmpfiles.d/tmp.conf文件。
添加X /tmp/tomcat.*,让系统不清除tomcat相关的目录(我用的这个,但是还需要观察一段时间看是否会出问题)
3.修改springboot配置文件,指定新的临时目录(这个我从网上抄的,没实践)新的上传目录需要手动创建,因为新指定的临时目录不是tmp,不会被清除,下面是我搜到的几个例子,yml文件要修改成对应的格式。

例子1:
application.properties 配置文件中添加spring.http.multipart.location=手动指定一个临时目录属性,注意:目录需要手动创建
例子2:
在配置文件application.properties中指定tomcat的临时路径:server.tomcat.basedir=/home/abc

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值