服务器删除临时目录问题

注:文中的“Doctor”是精分对话者,另一个我,道德约束者,话唠,请无视他。

开门见山:

最近某一天,项目经理打开测试环境看的时候,脸一黑,跑过来拍我肩膀:老兄呀,你看看这个批量导入接口报错了呀。

然后我们打开了这篇文章来看怎么在服务器上看日志:https://blog.csdn.net/Coder_gasenwell/article/details/105578734

Doctor:抓到了,就是这个人给自己的文章打广告  :) 

嗯。。。开门见山:

Doctor:你都开两次门见山了 :) 

我们大体读了知道是有一个临时的路径找不到,那么为什么会出现这种情况呢,我们接下来分析一下。

对于http的post请求,这个目录是临时存放请求数据的,我这次报错的接口就是一个post请求,这个文件不存在,所以请求会报错,那么为什么这个文件没了呢???

Doctor:难道是?

我:难道是??

Doctor&我:谋杀!?

据我分析,凶手就是--CentOS

对于超过一段时机不使用的临时目录,一些OS系统会做定期清理,因为测试环境之前测试完后好久没有人动过,所以从上一版到这次测试间隔了有一段时间,所以服务器上自动清理了临时目录。

CentOS6以下系统(含)使用watchtmp + cron来实现定时清理临时文件的效果,cron表达式也是定时任务开发中常用的有兴趣可以去了解一下。在CentOS7里面发生了变化,在CentOS7下,系统使用systemd管理易变与临时文件。有以下三个配置:

/etc/tmpfiles.d/*.conf
/run/tmpfiles.d/*.conf
/usr/lib/tmpfiles.d/*.conf

 /tmp目录的清理属于/usr/lib/tmpfiles.d/tmp.conf,默认的配置内容有部分内容为:

v /tmp 1777 root root 10d       # 清理/tmp下10天前的目录和文件
v /var/tmp 1777 root root 30d   # 清理/var/tmp下30天前的目录和文件

报错的路径是/tmp开始的,所以就是这个临时目录超过十天没有使用过了。

为了快速修复,我进行了服务重启,对于微服务架构的项目来说,这种方法还是比较简单的,发布部署很灵活,但是可能对于大型的单体应用就很头大了,所以在重启完修复好后,项目经理欣慰的离开时,我便开始找怎么能让OS系统不删除这个临时目录。

首先确认了我们项目各个环境服务器的系统,dev环境是Ubuntu,测试环境和正式环境是CentOS7。

在Ubuntu系统中,在/tmp文件夹里面的内容,每次开机都会被清空,CentOS7上面讲了是系统默认配置的时间。

针对不同系统的解决办法各自有,都比较麻烦,找了些教程,这里考虑使用统一配置解决问题,所以在项目的每个微服务yaml文件配置里,我加了以下内容:

server:
  servlet:
    context-path: /test
  tomcat:
    basedir: /home/ecarx/appsrv/tmp/test
    max-swallow-size: -1

basedir: /home/ecarx/appsrv/tmp/test 这一行相当于加了一个用户目录,这样系统在清理的时候会对该目录下的文件保留。

这里的配置还是很有趣的,max-swallow-size代表的是请求正文的最大大小,设置为-1代表着没有上限,也可以写成具体的大小,比如max-swallow-size:2MB,还可以配置请求头大小或整个POST请求的大小。

欢迎积极指正和交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值