概述分享一下最近应用中遇到的一个奇葩bug。一开始以为是代码的问题,后来找了一会儿发现其实是因为系统bug自动清理规则导致的,来看看吧~1.应用报错:logwire.core.exceptions.GeneralUnhandledException:服务器端未处理的异常...Causedby:org.springframework.web.multipart.MultipartException:Failedtoparsemultipartservletrequest;nestedexceptionisjava.io.IOException:临时上传位置[/tmp/tomcat.5454715517323162300.8031/work/Tomcat/localhost/ROOT]是notvalid....Causedby:java.io.IOException:Thetemporaryuploadlocation[/tmp/tomcat.5454715517323162300.8031/localhostwork/Tomcat/localhost]isnotvalid报错截图:2.IdeasCentOS7系统有一个默认的定时器,会执行一个临时的每1天进行一次目录清理操作,删除/tmp目录下所有超过10天未更改的子目录。如果某个Logwire系统的用户操作不是很活跃,tomcat运行的临时目录(如:/tmp/tomcat.xxx)会被删除。此时如果用户尝试上传文件,服务器会报错:Thetemporaryuploadlocation[/tmp/tomcat.5454715517323162300.8031/work/Tomcat/localhost/ROOT]isnotvalid3.处理过程在/usr/lib/tmp文件。在d/tmp.conf文件中增加一个配置项:x/tmp/tomcat*上面的配置表示清理临时目录时忽略所有以/tmp/tomcat开头的目录和文件。四、CentOS系统/tmp目录自动清理规则1、在CentOS7和CentOS7下,系统使用systemd来管理volatile和临时文件。有3个相关的系统服务:systemd-tmpfiles-setup.service:CreateVolatileFilesandDirectoriessystemd-tmpfiles-setup-dev.service:Createstaticdevicenodesin/devsystemd-tmpfiles-clean。service:CleanupofTemporaryDirectories相关的配置文件也有3个地方:/etc/tmpfiles.d/*.conf/run/tmpfiles.d/*.conf/usr/lib/tmpfiles.d/*.conf/tmp目录清理规则主要是取决于/usr/lib/tmpfiles.d/tmp.conf文件的设置。默认配置是:#Thisfileispartofsystemd.##systemdisfreesoftware;youcanredistributeitand/ormodifyit#underthetermsoftheGNULesserGeneralPublicLicenseaaspublishedby#theFreeSoftwareFoundation;eitherversion2.1oftheLicense,or#(atyourveroption.anylater)#Seetmpfiles.d(5)fordetails#Cleartmpdirectoriesseparately,tomakethev/measiertooverride7rootroot10d#清理10天前/tmp下的目录和文件v/var/tmp1777rootroot30d#清理30天前/var/tmp下的目录和文件#ExcludenamespacemountpointscreatedwithPrivateTmp=yesx/tmp/systemd-private-%b-*X/tmp/systemd-private-%b-*/tmpx/var/tmp/systemd-private-%b-*X/var/tmp/systemd-private-%b-*/tmp是CentOS7系统默认有一个定时器的每隔1天会执行一次临时目录清理操作,可以删除/tmp目录下所有超过10天未更改的子目录。这个文件可以配置。例如,如果不希望系统自动清理/tmp下以tomcat开头的目录,则在配置文件中添加如下内容:x/tmp/tomcat.*2,CentOS6及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内容稍后会分享,感兴趣的朋友可以关注~
