使用Jetty部署项目,项目资源被自动删除的解决方法以及Linux自动删除背后的原理

250 阅读2分钟

前言

在工作过程中难免会使用到Linux服务器,发现Linux会自动清除/tmp 目录下的某些文件,这会给我们带来什么样的影响?该如何处理呢?

问题发现

很早之前在公司的服务器上搭建了一个工具程序,用来提供自动生成word还有一些其他的功能,最近在使用的时候发现当生成文件的时候总是提示找不到文件模板,因为模板在工程中是放在resources目录下的,发布的时候确定了是存在的,但是服务运行几天之后就没了,然后重启一下服务就又有了,所以一直也没去查原因,今天又打开用了一下,发现再次提示模板不存在,打开服务器看了一下日志,发现存在好多报错信息,如下:

image.png

按照报错信息来到文件夹下看,果然这里有一个临时文件

image.png

打开里面看一下,发现这个文件夹里面放的其实就是jetty的发布目录,结构类似于tomcat的webapp目录:

image.png 那我的模板文件就是放在/webapp/WEB-INF/classes/template下的。

问题解决

那原因已经找到了,如何解决呢?
在启动jetty服务时,修改启动命令:增加-Djava.io.tmpdir=xxx
如下:

nohup java -Djava.io.tmpdir=/home/acctuser/postGirl/jetty/tmp -jar start.jar >> /home/acctuser/postGirl/postGirl_logs/all.log  2>&1 &

之后jetty的临时文件就将放到启动命令中指定的文件夹,这样就不会被Linux自动清理机制删除了。

扩展

问题都解决了,但是还是需要探索一下Linux自动清理时如何执行的,以及多久清理一次。 查看Linux系统配置:

image.png 命令如下:

# 查看调度规则
cat /usr/lib/systemd/system/systemd-tmpfiles-clean.timer
# 查看调度调用的服务
cat /usr/lib/systemd/system/systemd-tmpfiles-clean.service
# 查看调度服务执行的命令:
cat /usr/bin/systemd-tmpfiles --help
# 查看清理规则配置
cat /usr/lib/tmpfiles.d/tmp.conf
自定义删除规则

看到这里,我们知道了为什么临时目录/tmp中的文件会被清理,同理,我们在tmp.conf中新增一条配置,是不是也可以实现自动删除呢?
新增一条配置 image.png 执行命令:

image.png 效果: image.png

真的被删除了,以上是在原有文件中做的新增,如果自己新增一个xxxxtmp.conf文件不知道是否可行。

自定义配置文件

新建配置文件: image.png

手动调度:

image.png

执行结果:

image.png 果然是生效的。