2016-07-26 15 views
-1

Ich habe eine Skript-Bash, die Parameter benötigt.Bash-Skript funktioniert nicht, wenn auf Jee aufgerufen

Wenn ich es direkt aus Putty rufe, funktioniert es, wenn ich es von meinem Jee-Programm mache, funktioniert es nicht und zeigt mir keine Fehler.

Das ist mein Java-Code:

String[] cmdArray = {"sudo", "ssh", "-tt", "[email protected]", "/root/dve", "-l", "89.40.112.120,89.40.112.248", "you.mp4", "-s",".teeeest.avi" }; 

List<ObjectNode> listFileNode = new ArrayList<ObjectNode>(); 

try{ 
     Runtime rt = Runtime.getRuntime(); 
     ProcessBuilder pb = new ProcessBuilder(cmdArray); 
     Process proc = pb.start();  // Start the process. 
     System.out.println("Script executing"); 
     rc= proc.waitFor(); // Wait for the process to finish. 
     System.out.printf("Script executed successfully in ", rc); 

InputStream stderr = proc.getErrorStream(); 
        InputStreamReader isr = new InputStreamReader(stderr); 
        BufferedReader br = new BufferedReader(isr); 

        String line = null; 
        System.out.println("<ERROR___EXEC>"); 
        while ((line = br.readLine()) != null){ 

         System.out.println(line); 
         node.put("line",line); 
         listFileNode.add(node); 
         } 
        System.out.println("</ERROR___EXEC>"); 
        int exitVal = proc.waitFor(); 
        System.out.println("Process exitValue: " + exitVal); 


        InputStream processInputStream =proc.getInputStream(); 
        InputStreamReader inputStreamReader = new InputStreamReader(processInputStream); 
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 

        System.out.println("<RESULTAT___EXEC>"); 
        while ((line = bufferedReader.readLine()) != null){ 

         System.out.println(line); 
         node.put("lineR",line); 
         listFileNode.add(node); 

        } 
        System.out.println("</RESULTAT___EXEC>"); 

      }catch (Throwable t) 
       { 
       t.printStackTrace(); 
       } 

mir bitte helfen, ich auf diesem von einer Woche stecken bin, und ich finde keine Lösung

+0

Bitte nur genügend Code hier notwendig, um das Problem zu reproduzieren. – sjsam

+0

Hallo, der Java-Code, den ich gesetzt habe, war mein Federcontroller und das Skript, das ich ausführen möchte, ist hier verfügbar: https://github.com/nergdron/dve –

Antwort

0

Sie nicht sudo Befehl in dem Java-Code verwenden können, . Wenn Sie root-privilegierte Anwendungen ausführen müssen, müssen Sie vor der Ausführung Ihres Java-Codes zu root wechseln. Wenn Sie dies von Ihrem Java-Code aus tun möchten, müssen Sie setuid anrufen. Aber ich weiß nicht, dass Sie setuid von einem Java-Code anrufen können. Zu diesem Zweck benötigen Sie möglicherweise einen C/C++ - Wrapper, um zu root zu wechseln. Siehe: http://unix.stackexchange.com Frage zum Schreiben von Wrapper.