2016-11-02 4 views
0

Ich benutze Tomcat7 und ich habe versucht, Sh-Skript von Tomcat zu starten. Mein Sh-Skript muss eine neue Datei erstellen und Dinge in schreiben. Wenn ich mein Skript wie ./test.sh starten, funktioniert es perfekt, aber wenn ich Tomcat zum Starten dieses Skripts verwende, gehe ich einen Fehler der Erlaubnis verweigert während der Ausführung des Skripts hat nicht die Erlaubnis zu schreiben. Das ist mein Java-Code:Tomcat sh script Erlaubnis

 String[] fixCmd = new String[] { path }; 
    Process start = Runtime.getRuntime().exec(fixCmd); 

    // monitor standard error to find out what's wrong 
    BufferedReader r = new BufferedReader(new InputStreamReader(start.getErrorStream())); 
    String line = null; 
    while ((line = r.readLine()) != null) { 
     System.out.println(line); 
    } 

und mein Shell:

echo test >> test.txt 

Ich versuchte Process zu verwenden, aber es hat auch nicht funktioniert.

Ich versuchte, die Erlaubnis des Ordners mit der ganzen Lösung zu ändern, die ich gründet, und nichts hat funktioniert. Wenn exec Tomcat Skript als root gestartet hat, hat er alle erforderlichen Berechtigungen. Ich habe dem Benutzer von tomcat7 die volle Erlaubnis für den Ordner gegeben, falls sich nichts geändert hat. Ich habe einige andere Java-Skripte, die Datei auf dem Server erstellen und schreiben, so dass ich bereits das Recht geändert habe, Tomcat Dinge schreiben zu lassen, und es ist Arbeit, so weiß ich wirklich nicht, was das Problem des Skripts ist.

Irgendwelche Ideen?

Edit 1: Der Ausgang des ls -l ./test.sh getan:

-rwxr-xr-x 1 tomcat7 tomcat7 165 nov. 2 16:12 ./test.sh 

Ich bin als root angemeldet und i rot Kater wird als Wurzel zu betrachten.

Edit 2 Problem gelöst: Ein Spezialist erklärte mir, dass mein Problem ein Sicherheitsproblem ist, wie tomcat ein Web-Server ist es eine Sicherheit nicht zulassen, dass die Erlaubnis zum Schreiben auf sh Skript ist. Also änderte ich meine Herangehensweise an das Problem und ich werde die sh-Skriptausgabe in Java lesen und meine Datei von jave schreiben.

+0

Haben Sie selbst die Ausführungsberechtigungen des Skripts überprüft? – RealSkeptic

+0

Nun, es hat alle erforderlichen Berechtigungen, denke ich, wenn ich es in bash wie ./test.sh starten, macht er den Job perfekt. – Sulexa

+0

Ja, aber das ist nicht derselbe Benutzer, oder? Tomcat läuft unter einem anderen Benutzer. Bitte machen Sie ein 'ls -l./Test.sh' und fügen Sie die Ausgabe zu Ihrer Frage hinzu. – RealSkeptic

Antwort

0

Der Zugriff auf Dateien im Dateisystem des Containers ist schwierig und nicht erwünscht (imo). Ich schätze: Dein Problem hat nichts mit Berechtigungen für das Dateisystem selbst zu tun, sondern mit Berechtigungen des Webcontainers (hier: tomcat).

Siehe Accessing linux local file system from java web application

oder How to access external folder (Web Server)?

+0

Naja, tatsächlich befindet sich das sh-Skript in meinem webapps-Ordner, also kann ich darauf zugreifen und es starten, es ist wirklich nur das Skript, das keine Berechtigung zu haben scheint, wenn es von tomcat gestartet wird, wenn ich es von bash als root starte kein Problem zu laufen – Sulexa

+0

Sie greifen auf die Text.txt-Datei im Skript. Verfügen Sie auch über die richtigen Berechtigungen für das Verzeichnis (es benötigt Dateierstellungsberechtigungen, dh Verzeichnisbearbeitungsberechtigungen) und wenn es bereits existiert, für die Datei? –

+0

Wenn ich von Tomcat laufen bekomme ich "kann test.txt nicht erstellen: Berechtigung verweigert" Aber wenn ich das Skript von Shell ausführen, gehe ich keine Erlaubnis Problem. text.txt habe alle erforderlichen Erlaubnis, ich habe gerade versucht, 777 chmod es, aber es änderte nichts, immer Berechtigungen verweigert. – Sulexa