我正在尝试从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脚本,但这也不起作用。
有没有人对如何解决这个问题有任何想法?
答案 0 :(得分:1)
不确定ProcessBuilder
可以处理SO请求。对于我需要执行主机操作系统命令(Windows / OSX / Linux等等)的情况,我使用Runtime.exec(String)
:
String command = "/bin/sh -c sudo service " + webService + " start";
Runtime.getRuntime().exec(command);
如果您还希望获得输出和错误退出,可以使用Process
和BufferedReader
作为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
更改此文件意味着它会接受代码。梦魇调试这一整天都在进行!感谢所有的投入!