java.io.IOException: Cannot run program "/bin/sh -c cd /cpt/TestConnection/WebRoot/WEB-INF/classes/": java.io.IOException: error=2, No such file or directory
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at oaking.CheckVersion.CmdExec(CheckVersion.java:181)
at oaking.CheckVersion.tar_compress(CheckVersion.java:168)
at oaking.CheckVersion.downloadLocal(CheckVersion.java:97)
at org.apache.jsp.application.DownFileControl_jsp._jspService(DownFileControl_jsp.java:69)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 25 more

解决方案 »

  1.   

    首先确认一下路径是否存在 /cpt/TestConnection/WebRoot/WEB-INF/classes/
    然后确认java程序的用户是否有权限
    /bin/sh的执行权限,和/cpt/TestConnection/WebRoot/WEB-INF/classes/路径的访问权限
      

  2.   

    路径存在 但是java程序的用户的权限怎么弄的。。还望指点下
      

  3.   

    chmod 755 *
      

  4.   

    public void tar_compress(String dirPath, String fileNames, String fileName) {
    String cdCmd = "cd " + dirPath.trim();

    String cutCmd = "tar czvf /cpt/TestConnection/upload/"
    + fileName.trim() + ".tar.gz ";
    cutCmd += fileNames;
    String[] cmd = new String[]{"/bin/sh","-c","ls",cdCmd,"ls",cutCmd}; //System.out.println(cdCmd);
    System.out.println(cutCmd);
    //String[] arr = {cdCmd, cdCmd1, cdCmd2, cdCmd3, cdCmd4, cutCmd };
    CmdExec(cmd); // return ;
    } public void CmdExec(String[] cmdline) {
     String line;
    Process p = null;
    try {
    if (p != null) {
    p.destroy();
    p = null;
    }
    p = Runtime.getRuntime().exec(cmdline);
    //p.wait(10000);
     BufferedReader input = new BufferedReader(new InputStreamReader(p
     .getInputStream()));

     line = input.readLine();
     int i=0;
     while (true) {
    i++;
     if(i>50){
     break;
     }
     //while (line != null) {
     line = input.readLine();
     System.out.println(line);
     }

    p.waitFor();
    input.close();
    int ret = p.exitValue();
    //System.out.println("ret=:"+ret);
    } catch (Exception err) {
    err.printStackTrace();
    } finally {
    if (p != null) {
    close(p.getOutputStream());
    close(p.getInputStream());
    close(p.getErrorStream());
    p.destroy();
    }
    }
    }
    这是代码 java有执行权限的 打把出来是一个空包