J'ai été confronté à un problème étrange lors de l'écriture de l'application Grails déployée sur Tomcat.
Après avoir créé un contrôleur de test simple, je souhaite écrire le contenu du test dans le package
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);
}
}
}
Je reçois une exception:
Classe Java.io.FileNotFoundException Message /home/user/domains/domain.com/public_html/the-file-name.txt (Brak dostępu)
J'ai mis le chmod à 777 dans /home/user/domains/domain.com/public_html/
. Et Tomcat7.Tomcat7
est propriétaire. J'ai également essayé de créer ce fichier avec les droits d'accès 777 et la propriété définie sur Tomcat7, mais j'obtiens toujours une exception:
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
Quelles conditions d'OS dois-je également rencontrer?
Je serais très reconnaissant si quelqu'un pouvait clarifier le problème.
MODIFIER:
J'ai créé le répertoire sous /path1
, jeu 777. Les fichiers sont parfaitement stockés . J'ai également créé le répertoire sous /path2/testdir
, mais path2 ne dispose pas des autorisations 777 et chown. Cela fonctionne aussi. J'ai également testé la testdir
avec les caractères .
et _
, fonctionne également.
Je suis très investigateur et ne peux pas comprendre le comportement.
Assurez-vous que vous avez également lu et exécuté l'accès à tous les répertoires parents.
Exemple: chmod o+x /home/user
Enfin, j'ai résolu le problème. Un des répertoires de path n’ayant pas l’autorisation exécutable pour un autre groupe, ainsi, comme @JustinKSU l’a suggéré, il n’était pas possible de parcourir l’ensemble du chemin.
chmod o+x /home/user
a résolu le problème.
J'ai rencontré ce problème lors de la création d'un travail Jenkins. J'avais ajouté l'utilisateur jenkins
au groupe Tomcat7
, mais le travail Jenkins échouait lorsqu'il était supposé copier des artefacts dans le répertoire d'instance Tomcat.
En fin de compte, tout ce dont j'avais besoin pour résoudre ce problème était de redémarrer le service Jenkins.
FileNotFoundException se produit:
quand un fichier avec le chemin spécifié n'existe pas. Il faudra aussi être jeté si le fichier existe mais pour certains la raison est inaccessible, par exemple lorsqu’on tente d’ouvrir un fichier fichier en lecture seule pour l'écriture.
Le fichier est là et il a les droits d'écriture en fonction de ce que vous avez envoyé.
Dans certains cas, si le fichier auquel vous essayez d'accéder pour une opération de lecture/écriture est ouvert par un autre programme, cette erreur se produit. Utilisez lsof | grep the-file-name.txt
pour voir s’il est ouvert.
Même symptôme lorsque vous avez activé selinux
Vous pouvez vérifier l’état avec sestatus
et le désactiver avec setenforce 0
Cela peut résoudre votre problème à court terme, assurez-vous simplement qu’il est résistant au redémarrage.