【发布时间】:2015-09-18 22:09:46
【问题描述】:
我正在尝试从 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 中不起作用(运行时结果为 1)。
我也尝试过sudo systemctl start webservice.service,但无济于事 - 我还尝试调用已经位于 linux 机器上的 bash 脚本,但这也不起作用。
有人知道如何解决这个问题吗?
【问题讨论】:
-
你设置无密码sudo了吗?或者你如何提供密码?
-
尝试使用 sudo 运行你的 java 进程,这样进程将以更高的访问权限运行,并且能够触发像
sudo这样的管理员命令 -
哦,那不应该是
/bin/sh -c "sudo service webService start",吗? -
我删除了我的答案,因为下面的答案正是我所得到的。