Java:如何以用户身份执行外部命令?

时间:2019-02-06 23:07:49

标签: java processbuilder runtime.exec

我想知道如何以Java中的指定用户(hduser)身份执行以下命令: 我必须首先执行: “ sudo su hduser” 然后旨在执行以下命令: “ hadoop jar /executables/Primes/jar/execute.jar /Primes/numbers-small.txt / Primes /”

我尝试将ProcessBuilder与许多不同的参数一起使用,但是到目前为止还没有成功。如果有人可以告诉我我到底要去哪里,那真的很重要:)

我的代码供参考,如下所示。

            ProcessBuilder p = new ProcessBuilder(); 
            Runtime run = Runtime.getRuntime(); 
            if(dataset.getSelectedItem().equals("Small Dataset: 750,000 Numbers")){
                p = new ProcessBuilder("sudo su hduser", "hadoop", "jar", "/executables/Primes/jar/execute.jar", "/Primes/numbers-small.txt", "/Primes/");
            }
            else if (dataset.getSelectedItem().equals("Medium Dataset: 1,500,000 Numbers")){
                p = new ProcessBuilder("sudo", "su", "hduser", "hadoop jar /executables/Primes/jar/execute.jar /Primes/numbers-medium.txt /Primes/");
            }
            else if (dataset.getSelectedItem().equals("Large Dataset: 10,000,000 Numbers")){
                p = new ProcessBuilder("sudo su", "hduser", "hadoop jar /executables/Primes/jar/execute.jar", "/Primes/numbers-large.txt", "/Primes/");
            }

            try {
                p.start();
            } catch (Exception e) {
               JOptionPane.showMessageDialog(rootPane, e.getMessage()); 
            }

请注意,我确实尝试了许多参数(因此,您可以在上面的代码中看到我之前的失败尝试)。如果我犯了一些公然的错误(仍然是一个相对年轻的编码人员),请原谅我-我已经对这些方法做了相当多的阅读,但是我无法弄清问题所在并导致失败。

PS:我觉得重要的是要注意,作为“默认用户”,应该使用类似sudo su hduser -c hadoop jar /executables/Primes/jar/execute.jar / Primes / numbers- small.txt / Primes /'运行时,我收到一个“ hadoop:找不到命令”错误(尽管在分别执行命令的两个部分(先切换用户-然后执行命令)之后命令运行良好)。

0 个答案:

没有答案