从Java运行Linux服务

时间:2015-09-18 12:26:04

标签: java linux

我正在尝试从Java启动和停止Linux服务。我按照当前接受的做法使用ProcessBuilder。我构造了以下代码(webService是一个包含正在启动的服务名称的参数):

String[] commands = new String[6]; 

commands[0] = "/bin/sh";
commands[1] = "-c";
commands[2] = "sudo";
commands[3] = "service";
commands[4] = webService;
commands[5] = "start";

ProcessBuilder processBuilder = new ProcessBuilder(commands);

Process process = processBuilder.start();

int outcomeOfProcess = process.waitFor();

这实际上是调用命令/bin/sh -c sudo service webService start。从服务器的linux终端运行时运行正常然而从Java ProcessBuilder不起作用(运行时,outcomeOfProcess为1)。

我已经尝试了sudo systemctl start webservice.service但没有用 - 而且我也试图调用已经位于linux机器上的bash脚本,但这也不起作用。

有没有人对如何解决这个问题有任何想法?

2 个答案:

答案 0 :(得分:1)

不确定ProcessBuilder可以处理SO请求。对于我需要执行主机操作系统命令(Windows / OSX / Linux等等)的情况,我使用Runtime.exec(String)

String command = "/bin/sh -c sudo service " + webService  + " start";
Runtime.getRuntime().exec(command);

如果您还希望获得输出和错误退出,可以使用ProcessBufferedReader作为described in this answer

public static void main(String args[]) {
    String s;
    Process p;

    String command = "/bin/sh -c sudo service " + webService  + " start";

    try {
        // run the command
        p = Runtime.getRuntime().exec(command);
        BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
        // get the result
        while ((s = br.readLine()) != null)
            System.out.println("line: " + s);
        p.waitFor();
        // get the exit code
        System.out.println ("exit: " + p.exitValue());
        p.destroy();
    } catch (Exception e) {}
}

注意:不是Linux专家,所以我不能告诉100%你的命令行是正确的,但是你可以用这种方式执行它。

答案 1 :(得分:0)

问题是$(".select2-container").append("<span class="asterisk">*</span>"); 文件阻止了代码执行而没有sudoers更改此文件意味着它会接受代码。梦魇调试这一整天都在进行!感谢所有的投入!