web-dev-qa-db-ja.com

chmod 777にもかかわらずjava.io.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(Brakdostę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のどの条件も満たす必要がありますか?

誰かが問題を明確にすることができれば、私は非常に感謝しています。


[〜#〜] edit [〜#〜]

/path1の下にディレクトリを作成し、777を設定しました。ファイルは完全に保存されています。 /path2/testdirの下のディレクトリも作成しましたが、path2には777とchownの許可がありません。それも機能します。 ._の文字を含むtestdirもテストしていますが、これも動作します。

私は非常に調査しており、その振る舞いを理解できません。

20
Athlan

すべての親ディレクトリへの読み取りおよび実行アクセス権も持っていることを確認してください。

例:chmod o+x /home/user

21
JustinKSU

最後に、問題を解決しました。パス内のディレクトリの1つには、他のグループに対する実行権限がないため、@ JustinKSUが示唆したように、パス全体を通過する可能性はありませんでした。

chmod o+x /home/user 問題を解決しました。

6
Athlan

Jenkinsのジョブ内でビルド中にこの問題に遭遇しました。 jenkinsユーザーをTomcat7グループに追加しましたが、TomcatインスタンスディレクトリにアーティファクトをコピーすることになっているときはいつでもJenkinsジョブが失敗しました。

この問題を修正するために必要なのは、Jenkinsサービスを再起動することだけでした。

1
Abdull

FileNotFoundException が発生します:

指定されたパス名のファイルが存在しない場合。また、ファイルが存在するが、何らかの理由でアクセスできない場合、たとえば、書き込み専用で読み取り専用ファイルを開こうとした場合にもスローされます。

ファイルがあり、送信した内容に応じた書き込み権限があります。

場合によっては、読み取り/書き込み操作のためにアクセスしようとしているファイルが別のプログラムで開かれていると、このエラーが発生します。つかいます lsof | grep the-file-name.txt開いているかどうかを確認します。

1
user987339

selinuxをアクティブにしている場合も同じ症状
sestatusでステータスを確認し、setenforce 0でステータスを無効にできます。

短期間で問題を解決できる可能性があります。再起動の証拠になっていることを確認してください。

0
MonoThreaded