概述

分享最近应用碰到的一个奇怪bug,一开始以为是代码上的问题,找了一段时间发现居然是因为系统的一个自动清理规则导致,下面一起来看看吧~


一、应用报错:

logwire.core.exceptions.GeneralUnhandledException: 服务端未处理异常...Caused by: org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception isjava.io.IOException: The temporary upload location [/tmp/tomcat.5454715517323162300.8031/work/Tomcat/localhost/ROOT] is not valid....Caused by: java.io.IOException: The temporary upload location [/tmp/tomcat.5454715517323162300.8031/work/Tomcat/localhost/ROOT] is not valid

报错截图:


二、思路

CentOS 7 系统有一个默认定时器会每隔 1 天执行一次临时目录清理操作,把 /tmp 目录下所有超过 10 天没有任何变动的子目录全部删除。

若某个 Logwire 系统的用户操作不太活跃,则 tomcat 运行临时目录(形如: /tmp/tomcat.xxx)会被删除。这时候如果有用户试图上传文件,则服务端会报错:

The temporary upload location [/tmp/tomcat.5454715517323162300.8031/work/Tomcat/localhost/ROOT] is not valid


三、处理过程

在 /usr/lib/tmpfiles.d/tmp.conf 文件中增加配置项:

x /tmp/tomcat*

以上配置表示在清理临时目录时忽略所有以 /tmp/tomcat 开头的目录和文件


四、CentOS系统的/tmp目录自动清理规则

1、CentOS 7

CentOS7下,系统使用systemd管理易变与临时文件,与之相关的系统服务有3个:

systemd-tmpfiles-setup.service :Create Volatile Files and Directoriessystemd-tmpfiles-setup-dev.service:Create static device nodes in /devsystemd-tmpfiles-clean.service :Cleanup of Temporary Directories

相关的配置文件也有3个地方:

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

/tmp目录的清理规则主要取决于/usr/lib/tmpfiles.d/tmp.conf文件的设定,默认配置有:

# This file is part of systemd.## systemd is free software; you can redistribute it and/or modify it# under the terms of the GNU Lesser General Public License as published by# the Free Software Foundation; either version 2.1 of the License, or# (at your option) any later version. # See tmpfiles.d(5) for details # Clear tmp directories separately, to make them easier to overridev /tmp 1777 root root 10d # 清理/tmp下10天前的目录和文件v /var/tmp 1777 root root 30d # 清理/var/tmp下30天前的目录和文件 # Exclude namespace mountpoints created with PrivateTmp=yesx /tmp/systemd-private-%b-*X /tmp/systemd-private-%b-*/tmpx /var/tmp/systemd-private-%b-*X /var/tmp/systemd-private-%b-*/tmp

也就是CentOS 7 系统有一个默认定时器会每隔 1 天执行一次临时目录清理操作,把 /tmp 目录下所有超过 10 天没有任何变动的子目录全部删除。

可以配置这个文件,比如你不想让系统自动清理/tmp下以tomcat开头的目录,那么增加下面这条内容到配置文件中即可:

x /tmp/tomcat.*

2、CentOS 6

CentOS6以下系统(含)使用watchtmp + cron来实现定时清理临时文件的效果,该目录下的脚本每天执行一次。

如果要修改的话,可以修改此 tmpwatch 脚本(用 root 用户修改或其他用户 sudo 修改):

找到类似该语句:

/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix -X '/tmp/hsperfdata_*' -X '/tmp/.hdb*lock' -X '/tmp/.sapstartsrv*.log' 10d /tmp

为该语句添加 -X '/tmp/tomcat*' 参数,以便在清除时忽略所有以 /tmp/tomcat 开头的目录和文件:

/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix -X '/tmp/hsperfdata_*' -X '/tmp/.hdb*lock' -X '/tmp/.sapstartsrv*.log' -X '/tmp/tomcat*' 10d /tmp

觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

所有的service报红但不报错_从一个应用报错来看centos系统的/tmp目录自动清理规则...相关推荐

  1. java override报红_Eclipse @override报错解决

    第一种解决方案: @Override是JDK5 就已经有了,但有个小小的Bug,就是不支持对接口的实现,认为这不是Override 而JDK6 修正了这个Bug,无论是对父类的方法覆盖还是对接口的实现 ...

  2. java cell报错_有一个小小点问题,现在我想从eclipse上读取Excel表

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 有一个小小点问题,现在我想从eclipse上读取Excel表,但是sheet的方法getcell报错,请问这是哪儿的错呢?谢谢 源码及报错图片如下: pa ...

  3. springboot @value启动报错_打造一个 Spring Boot 注解启动控制开关

    #  场景说明 https://gitee.com/baomidou/jobs jobs 分布式任务调度组件 ,  任务调度中心启动注解 EnableJobsAdmin 默认注解上某个配置类对应 st ...

  4. 仍然报错_only_full_group_by配置,竟让所有应用报错?

    推荐学习 周一福利到!献上"独家全新"MySQL进阶套餐,简直就是血赚 全网独家的"MySQL高级知识"集合,骨灰级收藏,手慢则无 1. 踩坑经历 一个很平常的 ...

  5. 安装python报错_安装python包时报错

    pip install numpy 时 报错: Traceback (most recent call last): File "d:\学习\python\python-3.6.5\lib\ ...

  6. android edittext报错,Android中editText使用报错

    在activity_main.xml文件中添加了editText控件 android:id="@+id/edit_text" android:hint="@the nex ...

  7. dependency报红_解决IDEA中Maven依赖包导入失败报红问题(总结最有效8种解决方案)...

    问题描述: 真的,说来话长,这应该是我花最多时间去解决关于Maven依赖包导入的问题,以前粘贴复制导入,自动下载成功了, 这次怎么搞,怎么让他自动下载都还是红红的一片, 花了大半天,各种尝试,只为搏得 ...

  8. ServiceImpl或者Service引入mapper报红解决办法

    ServiceImpl或者Service引入mapper报红解决办法 在IntelliJ IDEA编码时,使用ServiceImpl或者Service引入mapper报红, 提示: Could not ...

  9. IntelliJ IDEA 学习笔记 - @Autowired 报红波浪线

    IntelliJ IDEA 学习笔记 - @Autowired 报红波浪线 情况一: 属性注入 情况二: 构造注入 最终效果 自欺欺人解决方案 方案1. 换 `@Resource` (这个我爱用) 方 ...

最新文章

  1. 900万张标注图像,谷歌发布Open Images最新V3版
  2. javascript 构造函数类和原型 prototyp e定义的属性和方法的区别
  3. 海生《我不是你的玩偶》关注颇高
  4. target与currentTarget的区别?
  5. matlab labs,DOCOMO Beijing Labs 借助 MATLAB 将移动通信技术的开发时间缩短 50%
  6. 【职场】遇到了个失业开滴滴的程序员
  7. 面向对象上机题-迭归算法
  8. iphone备忘录突然没了_苹果突然下架12 天猫:双11有惊喜!iPhone12 mini配色缩水
  9. 【Docker】Asp.net core在docker容器中的端口问题
  10. 20140625 程序 进程 线程 物理存储器
  11. [转] css3变形属性transform
  12. mysql将一个表的字段更新到另一个表中
  13. 【数据库系统原理】实体-联系模型
  14. uva 11916 Emoogle Grid (BSGS)
  15. 四、公文流转的基本过程
  16. 双机热备的概念双机热备的概念
  17. ArcGIS 分类标注
  18. 国内外技术论坛的区别
  19. 管理经济分析05:并购、价格歧视、四个市场、招标与拍卖
  20. 2019-2020 10th BSUIR Open Programming Championship. Semifinal 补题

热门文章

  1. 超详细 | 21张图带你领略集合的线程不安全
  2. Aruba 推出Instant On 为中小型企业提供安全、高速的无线连接
  3. 成立一周?谷歌人工智能道德委员会解散了?近日,金山云和小米刚签订了不超过9000万的硬件产品供应协议,闹哪样? | 极客头条...
  4. vue 前期准备,项目结构
  5. 用imspost制作catia后处理_这些有趣又精致的模型,都是用3D打印机打印出来的
  6. larvel php restful_laravel 实现一个简单的 RESTful API
  7. delphi7 如何判定dbgrid两行重复_教你如何在服装上加入好看的毛线刺绣花边
  8. 使用MAT工具分析内存溢出
  9. mybatis 插入数据后返回自增id
  10. SLF4JLogFactory does not implement org.apache.commons.logging.LogFactory