wake-up-neo.net

java.io.FileNotFoundException (Berechtigung verweigert) trotz chmod 777

Ich habe beim Schreiben von Grails-Anwendungen, die auf Tomcat bereitgestellt werden, ein seltsames Problem gehabt.

Nach dem Erstellen eines einfachen Testcontrollers möchte ich Testinhalte in Package com schreiben

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);
                }
        }
}

Ich bekomme eine Ausnahme:

Klasse Java.io.FileNotFoundException Nachricht /home/user/domains/domain.com/public_html/the-file-name.txt (Brak dostępu)

Ich habe den Chmod auf 777 in /home/user/domains/domain.com/public_html/ eingestellt. Und Tomcat7.Tomcat7 ist Eigentümer. Ich habe auch versucht, diese Datei mit den Zugriffsrechten 777 und den Besitzrechten für Tomcat7 zu erstellen, aber ich bekomme immer noch eine Ausnahme:

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

Welche Bedingungen im Betriebssystem sollte ich auch erfüllen?

Ich wäre sehr dankbar, wenn jemand das Problem klären könnte.


EDIT:

Ich habe das Verzeichnis unter /path1 erstellt, set 777. Die Dateien werden perfekt gespeichert . Ich habe auch das Verzeichnis unter /path2/testdir erstellt, aber path2 hat keine Berechtigung 777 und chown. Es funktioniert auch. Ich habe auch die testdir mit den Zeichen . und _ getestet, funktioniert auch.

Ich bin sehr recherchierend und kann das Verhalten nicht verstehen.

19
Athlan

Stellen Sie sicher, dass Sie auch Zugriff auf alle übergeordneten Verzeichnisse haben und ausführen.

Beispiel: chmod o+x /home/user

20
JustinKSU

Endlich habe ich das Problem gelöst. Eines der Verzeichnisse in path hat keine Berechtigung für eine ausführbare Datei für eine andere Gruppe. Daher gab @JustinKSU an, dass es nicht möglich war, den gesamten Pfad durchzugehen.

chmod o+x /home/user hat das Problem gelöst.

6
Athlan

Ich bin während eines Jenkins-Jobs während des Builds auf dieses Problem gestoßen. Ich hatte den Benutzer jenkins der Gruppe Tomcat7 hinzugefügt. Der Jenkins-Job schlug jedoch fehl, wenn Artefakte in das Tomcat-Instanzverzeichnis kopiert werden sollten.

Alles was ich brauchte, um dieses Problem zu beheben, war der Neustart des Jenkins-Dienstes.

1
Abdull

FileNotFoundException tritt auf: 

wenn eine Datei mit dem angegebenen Pfadnamen nicht vorhanden ist. Es wird auch geworfen werden, wenn die Datei existiert, aber für einige Grund ist nicht erreichbar, z. B. wenn versucht wird, eine .__ zu öffnen. schreibgeschützte Datei zum Schreiben.

Die Datei ist da und hat Schreibrechte entsprechend dem, was Sie gesendet haben.

In einigen Fällen wird dieser Fehler auftreten, wenn die Datei, auf die Sie für den Lese-/Schreibvorgang zugreifen möchten, von einem anderen Programm geöffnet wird. Verwenden Sie lsof | grep the-file-name.txt, um zu sehen, ob es geöffnet ist. 

1
user987339

Gleiche Symptome, wenn Sie selinux aktiviert haben
Sie können den Status mit sestatus überprüfen und mit setenforce 0 deaktivieren.

Es kann Ihr Problem kurzfristig lösen. Stellen Sie nur sicher, dass der Neustart gesichert ist. 

0
MonoThreaded