gpt4 book ai didi

java - 从 Java 运行 linux 服务

转载 作者:太空宇宙 更新时间:2023-11-04 10:47:12 25 4
gpt4 key购买 nike

我正在尝试从 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 脚本,但这也不起作用。

有人知道如何解决这个问题吗?

最佳答案

不确定 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% 判断您的命令行是正确的,但是是的,您可以通过这种方式执行它。

关于java - 从 Java 运行 linux 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32652021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com