前言
在工作过程中难免会使用到Linux服务器,发现Linux会自动清除/tmp 目录下的某些文件,这会给我们带来什么样的影响?该如何处理呢?
问题发现
很早之前在公司的服务器上搭建了一个工具程序,用来提供自动生成word还有一些其他的功能,最近在使用的时候发现当生成文件的时候总是提示找不到文件模板,因为模板在工程中是放在resources目录下的,发布的时候确定了是存在的,但是服务运行几天之后就没了,然后重启一下服务就又有了,所以一直也没去查原因,今天又打开用了一下,发现再次提示模板不存在,打开服务器看了一下日志,发现存在好多报错信息,如下:
按照报错信息来到文件夹下看,果然这里有一个临时文件
打开里面看一下,发现这个文件夹里面放的其实就是jetty的发布目录,结构类似于tomcat的webapp目录:
那我的模板文件就是放在/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系统配置:
命令如下:
# 查看调度规则
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中新增一条配置,是不是也可以实现自动删除呢?
新增一条配置
执行命令:
效果:
真的被删除了,以上是在原有文件中做的新增,如果自己新增一个xxxxtmp.conf文件不知道是否可行。
自定义配置文件
新建配置文件:
手动调度:
执行结果:
果然是生效的。