java服务出现IO Error/Permission denied,如下:
Caused by: java.io.IOException: Permission denied
at java.io.UnixFileSystem.createFileExclusively(Native Method) ~[na:1.8.0_232]
at java.io.File.createTempFile(File.java:2024) ~[na:1.8.0_232]
at org.apache.poi.util.DefaultTempFileCreationStrategy.createTempFile(DefaultTempFileCreationStrategy.java:110) ~[poi-3.17.jar!/:3.17]
at org.apache.poi.util.TempFile.createTempFile(TempFile.java:66) ~[poi-3.17.jar!/:3.17]
at org.apache.poi.xssf.streaming.SXSSFWorkbook.write(SXSSFWorkbook.java:924) ~[poi-ooxml-3.17.jar!/:3.17]
at com.alibaba.excel.write.ExcelBuilderImpl.finish(ExcelBuilderImpl.java:89) ~[easyexcel-1.1.2-beat1.jar!/:na]
... 135 common frames omitted
问题解决步骤:
- 找到 JVM 参数
-Djava.io.tmpdir
,使用ps -ef | grep java
- 找到此目录,查看权限,一般情况下是jvm process用户的权限问题。
- 如果没有这个参数。默认的目录是
/tmp
目录。
顺便说一下目录权限修改:
chown -R user:group /tmp/*
chown
是修改文件归属哪个用户和组-R
是递归修改,即把子目录也修改了user:group
是java process所属的用户和组tmp/*
也可以是/tmp
,但是/tmp
会把tmp
目录本身的归属也该了。tmp
默认属于root
用户,不建议修改。