在項(xiàng)目中,一般會(huì)將文件臨時(shí)保存到緩存目錄,當(dāng)時(shí)使用
File.createTempFile("tmp", ext, (File) request.getServletContext().getAttribute(ServletContext.TEMPDIR))
創(chuàng)建臨時(shí)文件時(shí),項(xiàng)目一直運(yùn)行正常,然而有一次報(bào)異常:
The temporary upload location [/tmp/tomcat.7104877156386249310.8070/work/Tomcat/localhost/ROOT] is not valid
檢查文件目錄,文件確實(shí)不在,檢查代碼,也未發(fā)現(xiàn)問(wèn)題。實(shí)在不知道原因,只有重啟了服務(wù)器,問(wèn)題也就不再出現(xiàn)。
今天偶然查看官方文檔,發(fā)現(xiàn)問(wèn)題所在,也提供了解決方法
If you choose to use Tomcat on CentOS be aware that, by default, a temporary directory is used to store compiled JSPs, file uploads etc. This directory may be deleted by tmpwatch while your application is running leading to failures. To avoid this, you may want to customize your tmpwatch configuration so that tomcat.* directories are not deleted, or configure server.tomcat.basedir so that embedded Tomcat uses a different location
前往目錄/etc/cron.daily/
中,修改 tmpwatch
文件:
#! /bin/sh
flags=-umc
/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_*' 10d /tmp \
-X '/tmp/tomcat.*' 10d /tmp
/usr/sbin/tmpwatch "$flags" 30d /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
if [ -d "$d" ]; then
/usr/sbin/tmpwatch "$flags" -f 30d "$d"
fi
done
可以看到添加了一行
-X '/tmp/tomcat.*' 10d /tmp