Java.io.FileNotFoundException(разрешение отклонено), несмотря на chmod 777

Я столкнулся с странным поблемом при написании приложения Grails, развернутого на Tomcat.

После создания простого тестового контроллера я хочу написать тестовое содержимое в пакет 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

Какие условия в ОС также должны встречаться?

Я был бы очень признателен, если бы кто-нибудь смог прояснить проблему.


ИЗМЕНИТЬ

Я создал каталог под /path1, установите 777. Файлы хранятся отлично. Я также разбил каталог под /path2/testdir, но path2 не имеет разрешения 777 и chown. Он также работает. Я также тестировал testdir с символами . и _, также работает.

Я очень расследую и не могу понять поведение.

Ответ 1

Убедитесь, что вы прочитали и выполнили доступ ко всем родительским каталогам.

Пример: chmod o+x /home/user

Ответ 2

Наконец, я решил проблему. Один из каталогов в пути не имеет исполняемого разрешения для другой группы, так как @JustinKSU предположил, что нет возможности пройти весь путь.

chmod o+x /home/user решил проблему.

Ответ 3

FileNotFoundException происходит:

когда файл с указанным именем пути не существует. Это также быть выброшенным, если файл существует, но для некоторых причина недоступна, например, когда предпринимается попытка открыть только для чтения для записи.

Файл есть, и он имеет права на запись в соответствии с тем, что вы отправили.

В некоторых случаях, если файл, который вы пытаетесь получить для операции чтения/записи, открывается другой программой, тогда эта ошибка произойдет. Используйте lsof | grep the-file-name.txt, чтобы узнать, открыт ли он.

Ответ 4

Я столкнулся с этой проблемой во время сборки в задании Дженкинса. Я добавил пользователя jenkins в группу tomcat7, но работа Jenkins завершилась неудачно всякий раз, когда предполагалось скопировать артефакты в каталог экземпляра Tomcat.

Оказалось, что мне нужно было исправить эту проблему, чтобы перезапустить службу Jenkins.