Search code examples
javaprocessbuilder

ProcessBuilder throwing java.lang.Exception:


I am trying to figure out why the code below is throwing a

java.lang.Exception: No such file or directory

Exception

        ProcessBuilder send = new ProcessBuilder("/bin/bash","/opt/ftp/scripts/XFER.sh | /opt/ftp/myftp -c /opt/ftp/ftp.conf >> /logging/ftp.log2>&1");
        Process sendProcess = send.start();
        br = new BufferedReader(new InputStreamReader(sendProcess.getErrorStream()));
        builder = new StringBuilder();
        line = null;
        while ( (line = br.readLine()) != null) {
           builder.append(line);
           builder.append(System.getProperty("line.separator"));
        }
        if(!builder.toString().isEmpty()){
            throw new Exception( "ERROR with XFER.sh: "+builder.toString() );
        }   

I've tried isolating the arguments within a String Array, but that did not work either. Any ideas as to what may be causing this stacktrace?


Solution

  • I have success using the following code. Maybe you have to use the -c option:

    private static int execute(String command) {
        Runtime runtime = null;
        Process process = null;
    
        int exitValue = -1;
        BufferedInputStream bis = null;
    
        try {
            runtime = Runtime.getRuntime();
    
            process = runtime.exec(new String[] { "/bin/bash", "-c", command });
            bis = new BufferedInputStream(process.getInputStream());
    
            byte[] b = new byte[1892];
            while (bis.read(b) != -1) {
            }
    
            exitValue = process.waitFor();
    
            if (bis != null) {
                try {
                    bis.close();
                } catch (IOException e) {
                }
            }
            if (process != null) {
                process.destroy();
            }
        } catch (Exception e) {
            //Logging
        }
    
        return exitValue;
    }