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
もテストしていますが、これも動作します。
私は非常に調査しており、その振る舞いを理解できません。
すべての親ディレクトリへの読み取りおよび実行アクセス権も持っていることを確認してください。
例:chmod o+x /home/user
最後に、問題を解決しました。パス内のディレクトリの1つには、他のグループに対する実行権限がないため、@ JustinKSUが示唆したように、パス全体を通過する可能性はありませんでした。
chmod o+x /home/user
問題を解決しました。
Jenkinsのジョブ内でビルド中にこの問題に遭遇しました。 jenkins
ユーザーをTomcat7
グループに追加しましたが、TomcatインスタンスディレクトリにアーティファクトをコピーすることになっているときはいつでもJenkinsジョブが失敗しました。
この問題を修正するために必要なのは、Jenkinsサービスを再起動することだけでした。
FileNotFoundException が発生します:
指定されたパス名のファイルが存在しない場合。また、ファイルが存在するが、何らかの理由でアクセスできない場合、たとえば、書き込み専用で読み取り専用ファイルを開こうとした場合にもスローされます。
ファイルがあり、送信した内容に応じた書き込み権限があります。
場合によっては、読み取り/書き込み操作のためにアクセスしようとしているファイルが別のプログラムで開かれていると、このエラーが発生します。つかいます lsof | grep the-file-name.txt
開いているかどうかを確認します。
selinux
をアクティブにしている場合も同じ症状sestatus
でステータスを確認し、setenforce 0
でステータスを無効にできます。
短期間で問題を解決できる可能性があります。再起動の証拠になっていることを確認してください。