在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
字符.
和_
,也可以。
我很调查,无法理解这种行为。
答案 0 :(得分:20)
确保您还具有对所有父目录的读取和执行权限。
实施例:
chmod o+x /home/user
答案 1 :(得分:6)
最后我解决了这个问题。路径中的一个目录没有其他组的可执行权限,因此@JustinKSU建议,没有可能完成整个路径。
chmod o+x /home/user
解决了这个问题。
答案 2 :(得分:1)
具有指定路径名的文件不存在时。它也会 如果文件确实存在但是对某些文件存在则抛出 原因是无法访问的,例如当尝试打开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