2016-07-01 6 views
1

Ich schaffe bereits die .sh-Datei, und das Innere ist:Wie wird die .sh-Datei mit Process Builder ausgeführt?

sudo iptables --flush 
sudo iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP 

Es funktioniert normalerweise, wenn ich es auf dem Terminal laufen, aber wenn ich Process verwenden, es habe nichts getan. Kein Fehler, aber nichts passiert, dann ist dies der Code auf meinem java:

Process pb = new ProcessBuilder("/bin/bash","/my/file.sh").start(); 

ich schon für die Antwort suchen, aber ich immer noch nicht die .sh-Datei auszuführen, auch ich die gleiche Sache mit Leute, die es schon getan haben. Sorry, wenn das eine schlechte Frage ist, danke.

+0

Wahrscheinlich warten auf Kennwörter. Hast du Sudo ohne Passwort für den Benutzer eingerichtet? –

+0

Möchten Sie nur Processbuilder verwenden oder eine andere Problemumgehung funktioniert auch? –

+0

Wie sieht Ihr Befehl im Terminal aus? – Wilson

Antwort

0

Sind Sie sicher, dass die Bash nicht ausgeführt wird? Haben Sie das Objekt Process überprüft, das von der Methode start zurückgegeben wurde? Sie können den Ausgabewert, den Ausgabestrom usw. von diesen Objekten abrufen.

0

Überprüfen Sie Ihre Streams und exitvalue für Fehler ... sudo ist wahrscheinlich das Problem hier.

Nicht unbedingt der beste Code, aber es macht die Arbeit erledigt. Führt einen Prozess aus, übernimmt die process.streams und druckt sie auf System.out. Könnte helfen, herauszufinden, was das Problem eigentlich ist.

ProcessBuilder pb = new ProcessBuilder(args); 
    pb.redirectErrorStream(true); 

    final Process proc = pb.start();  

    final StringBuilder builder = new StringBuilder("Process output"); 

    final Thread logThread = new Thread() { 
     @Override 
     public void run() { 
      InputStream is = proc.getInputStream(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 

       try { 
        String line; 

        do { 
         line = reader.readLine(); 
         builder.append(""); 
         builder.append(line == null ? "" : line); 
         builder.append("<br/>");  
        } while(line != null); 

       } catch (IOException e) { 
        builder.append("Exception! ").append(e.getMessage()); 
       } finally { 
        try { 
         reader.close(); 
        } catch (IOException e) { 
         builder.append("Exception! ").append(e.getMessage()); 
        } 
       } 
      } 
     }; 

    logThread.start(); 
    int retVal = proc.waitFor(); 
    System.out.println(builder.toString()); 
0

Von Java API Laufzeit: http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html

// Java runtime 
Runtime runtime = Runtime.getRuntime(); 
// Command 
String[] command = {"/bin/bash", "/my/file.sh"}; 
// Process 
Process process = runtime.exec(command); 

Auch sollten Sie mit sudo Befehle vorsichtig sein, die für root Passwort fragen.

Verwandte Themen