2017-03-29 56 views
0

我想在我的tomcat web服务器上运行脚本。要在本地机器上运行脚本,这是我使用的代码。从Tomcat服务器上的文件夹运行脚本

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

当我尝试在tomcat web服务器上运行它时,我不断收到此错误。

EclipseEE.app/Contents/MacOS/Ubuntu解析失败模板:开 ubuntu_file.json:没有这样的文件或目录

我是相当新的Tomcat和我刚学它的来来去去。什么tomcat目录应该放置我的Ubuntu文件夹(我假设它是webapp目录),以便tomcat获取文件夹的绝对路径,然后能够运行该脚本。

+2

您不应该依赖Web服务器的当前目录(例如Tomcat)。始终在Web应用程序代码中使用完全限定的文件名。 – Andreas

+0

如果这听起来很愚蠢,我很抱歉。我对这一切都很陌生。那么我应该怎么做呢?它原本不应该是一个网络应用程序。 – user3078335

+0

如果您不想对合格的文件名进行硬编码(这不是一个好主意),这意味着您的web应用程序需要配置*的能力,例如使用[servlet初始化参数](http://stackoverflow.com/q/14665037/5221149)。 – Andreas

回答

0

如果你有或多或少的常规安装Tomcat则$CATALINA_HOME环境变量将被设置并指向您的服务器安装,这将至少包含以下目录:

$CATALINA_HOME/ 
    bin/ 
    conf/ 
    lib/ 
    webapps/ 

你可以得到的值$ CATALINA_HOME通过:

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

我会倾向于把你的配置在conf子目录。

如果您在同一个基础上运行多个Tomcat实例,请务必阅读随附的RUNNING.txt文件,因为您可能需要使用$CATALINA_BASE

当您使用Eclipse控制的服务器在本地运行时,您可能需要在Eclipse Tomcat Runtime环境中设置CATALINA_HOME/BASE

顺便说一句。这不是一个便携式解决方案。如果您需要迁移到其他容器(例如WildFly或Glassfish),那么其他人推荐的绝对路径配置就是要走的路。

相关问题