尽管chmod 777,java.io.FileNotFoundException(权限被拒绝)

时间:2014-01-08 23:44:02

标签: java tomcat grails ioexception filenotfoundexception

在Tomcat上编写Grails应用程序时,我遇到了一些奇怪的问题。

创建简单的测试控制器后,我想写入测试内容 包com

package com.domain.controller

import java.io.File;
import java.io.PrintWriter;

class TestController {

        def index() {
                // test
                try {
                        PrintWriter writer = new PrintWriter("/home/user/domains/domain.com/public_html/the-file-name.txt");
                        writer.println("The first line");
                        writer.println("The second line");
                        writer.close();
                } catch (IOException e) {
                        throw new RuntimeException(e);
                }
        }
}

我得到一个例外:

  

类java.io.FileNotFoundException消息   /home/user/domains/domain.com/public_html/the-file-name.txt(Brak   dostępu)

我已将chmod设置为777到/home/user/domains/domain.com/public_html/tomcat7.tomcat7是所有者。我还试图创建这个文件,访问权限777和所有权设置为tomcat7,但我仍然得到一个例外:

ls -al /home/user/domains/domain.com/public_html
razem 16
drwxrwxrwx 3 tomcat7 tomcat7 4096 01-08 23:25 .
drwxr-xr-x 8 user    user    4096 12-16 17:14 ..
-rwxrwxrwx 1 tomcat7 tomcat7    0 01-08 23:25 the-file-name.txt

我应该在OS中遇到什么条件?

如果有人能澄清问题,我将非常感激。


修改

我在/path1下创建了目录,设置为777.文件存储完美。 我还创建了/path2/testdir下的目录,但是path2没有权限777和chown。它也有效。我还测试testdir字符._,也可以。

我很调查,无法理解这种行为。

6 个答案:

答案 0 :(得分:20)

确保您还具有对所有父目录的读取和执行权限。

实施例: chmod o+x /home/user

答案 1 :(得分:6)

最后我解决了这个问题。路径中的一个目录没有其他组的可执行权限,因此@JustinKSU建议,没有可能完成整个路径。

chmod o+x /home/user解决了这个问题。

答案 2 :(得分:1)

FileNotFoundException发生:

  

具有指定路径名的文件不存在时。它也会   如果文件确实存在但是对某些文件存在则抛出   原因是无法访问的,例如当尝试打开a时   用于写作的只读文件。

文件在那里,它根据您发送的内容具有写权限。

在某些情况下,如果您尝试访问以进行读/写操作的文件被另一个程序打开,则会发生此错误。使用lsof | grep the-file-name.txt查看它是否已打开。

答案 3 :(得分:1)

我在Jenkins作业中的构建过程中遇到了这个问题。我已将jenkins用户添加到tomcat7组,但只要应将工件复制到Tomcat实例目录,Jenkins作业就会失败。

事实证明,我需要解决的问题是重启Jenkins服务。

答案 4 :(得分:0)

激活public bool isRed (long long val){ for(;val >= 0; val = val -2){ if(value == 0) return false; } return true; }后出现相同症状
您可以使用selinux检查状态,并使用sestatus禁用状态

它可能会在短期内解决您的问题,只需确保它具有重启证明即可。

答案 5 :(得分:0)

我使用的是Virtual Box 6.1和macOS Catalina 10.15.5。

就我而言,我需要添加-R标志。 chmod -R o+x /home/user