如何使用Java代码检查Linux计算机上是否正在运行服务

时间:2018-10-12 10:57:17

标签: java linux bash unix

我想检查在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()为空。

1 个答案:

答案 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,