2017-03-29 2 views
0

Ich versuche, ein Skript auf meinem Tomcat-Webserver auszuführen. Um das Skript zuvor auf meinem lokalen Computer auszuführen, ist dies der Code, den ich verwendet habe.Ausführen eines Skripts aus einem Ordner auf einem Tomcat-Server

String absolutePath = new File(".").getAbsolutePath(); 
     int last = absolutePath.length()-1; 
     absolutePath = absolutePath.substring(0, last); 
     String filePath = ""; 
     if(osVersion.equalsIgnoreCase("Ubuntu")) 
     { 
      try (FileReader fr = new FileReader("template.txt"); 
        FileWriter fw = new FileWriter("Ubuntu/ubuntu_file.json");) { 
        int c = fr.read(); 
        while(c!=-1) { 
         fw.write(c); 
         c = fr.read(); 
        } 
       } catch(IOException e) { 
        e.printStackTrace(); 
       } 
      filePath = "Ubuntu"; 
      String fi = absolutePath + filePath; 
      System.out.println(fi);//Get the full path. 
      // Create ProcessBuilder. 
      ProcessBuilder pb = new ProcessBuilder("bash", "-c", 
        "cd "+fi+" ; PACKER_LOG=1 /usr/local/bin/packer build ubuntu_file.json"); 

      Process p = pb.start(); 

Wenn aber ich versuche, es auf dem Webserver Kater zu laufen, ich erhalte diesen Fehler.

EclipseEE.app/Contents/MacOS/Ubuntu fehlgeschlagen Vorlage analysieren: open ubuntu_file.json:

Ich bin zu Tomcat ziemlich neu keine solche Datei oder das Verzeichnis, und ich lerne gerade, dass es Ins und Outs. In welches Tomcat-Verzeichnis soll ich meinen Ubuntu-Ordner stellen (ich nehme an, es ist das Webapp-Verzeichnis), damit Tomcat den absoluten Pfad des Ordners bekommt und dann das Skript ausführen kann.

+2

Sie sollten niemals auf das aktuelle Verzeichnis eines Webservers (z. B. Tomcat) angewiesen sein. Verwenden Sie immer vollständig qualifizierte Dateinamen im Webanwendungscode. – Andreas

+0

Es tut mir leid, wenn das dumm klingt. Ich bin neu in all dem. Wie soll ich es dann machen? Es sollte ursprünglich keine Web-App sein. – user3078335

+0

Wenn Sie einen qualifizierten Dateinamen nicht fest codieren möchten (keine gute Idee), bedeutet dies, dass Ihre Webanwendung * konfiguriert * werden muss, z. [Servlet-Initialisierungsparameter] verwenden (http://stackoverflow.com/q/14665037/5221149). – Andreas

Antwort

0

Wenn Sie eine mehr oder weniger konventionellen Tomcat-Installation haben dann die $CATALINA_HOME Umgebungsvariable wird auf dem Server der Installation festgelegt und Punkt werden, die zumindest die folgenden Verzeichnisse enthalten:

$CATALINA_HOME/ 
    bin/ 
    conf/ 
    lib/ 
    webapps/ 

Sie können den Wert von erhalten $ CATALINA_HOME über:

String catalinaHomeDir = System.getenv("CATALINA_HOME"); 

ich würde geneigt sein, Ihre Konfiguration im conf Unterverzeichnis zu setzen.

Wenn Sie mehrere Tomcat-Instanzen von derselben Basis aus ausführen, lesen Sie die Datei RUNNING.txt, die mit dem System geliefert wird, da Sie stattdessen möglicherweise $CATALINA_BASE verwenden müssen.

Sie müssen möglicherweise CATALINA_HOME/BASE in Ihrer Eclipse Tomcat Runtime-Umgebung einrichten, wenn Sie lokal mit einem von Eclipse gesteuerten Server arbeiten.

BTW. Dies ist keine portable Lösung. Wenn Sie zu einem anderen Container (z. B. WildFly oder Glassfish) migrieren müssen, ist die von anderen empfohlene absolute Pfadkonfiguration der richtige Weg.

Verwandte Themen