我想检查在Linux上运行的服务的状态。 在机器上,我使用命令“ systemctl is-active service-name”检查服务的状态。并且将输出显示为active / inactive(当服务正在运行/未运行时)。
我想获取java中服务的状态。我该怎么做?
我尝试过这个。
String SERVER_STATUS = new String[]{SUDO_COMMAND, "systemctl is-active vpnd.service"};
try {
final Process process = new ProcessBuilder(SERVER_STATUS).start();
process.waitFor();
InputStream in = process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = null;
System.out.println("status: " + br.readLine());
} catch (IOException | InterruptedException e) {}
但是br.readLine()
为空。
答案 0 :(得分:0)
我认为这是因为运行该应用程序时出错。您的Java进程是否具有运行systemctl
的权限?找不到服务吗?
我建议您还检查退出值,然后检查适当的错误流。
例如在Windows计算机上,如果我在cmd命令中输入了错误
String[] SERVER_STATUS_COMMAND = {"cmd.exe", "/c", "echoo foobar"};
您的程序将编写
status: null
如果我们稍微调整应用程序,我们可以将错误流重定向到输出:
final Process process = new ProcessBuilder(SERVER_STATUS_COMMAND)
.redirectErrorStream(true)
.start();
然后程序将编写:
status: 'echoo' is not recognized as an internal or external command,