使用Java代码启动filebeat?

时间:2017-04-28 04:32:31

标签: java powershell processbuilder filebeat

我正在使用filebeat来读取一些日志文件,我需要使用Java程序启动filebeat。 filebeat命令使用Windows PowerShell执行。我使用了以下代码,但它没有用。

try {
    ProcessBuilder b1 = new ProcessBuilder("powershell.exe", "/c", "cd \"C:\\Program Files\\Filebeat\" && ./filebeat -e -c filebeat.yml -d \"publish\"\\");
    b1.redirectErrorStream(true);
    Process p1 = b1.start();
    BufferedReader r1 = new BufferedReader(new InputStreamReader(p1.getInputStream()));
    String line1;
    while (true) {
        line1 = r1.readLine();
        if (line1 == null) { break; }
        System.out.println(line1);
    }
} catch(Exception e) {
}

2 个答案:

答案 0 :(得分:0)

您将PowerShellCMD混为一谈。后者有一个参数/c,前者没有。{另外,不要在comandline中使用cd,而应该只在ProcessBuilder对象上设置工作目录,并且命令行的每个标记应该是一个单独的数组元素。

将您的代码更改为类似的内容,它应该按预期执行:

ProcessBuilder b1 = new ProcessBuilder("cmd.exe", "/c", "filebeat", "-e", "-c", "filebeat.yml", "-d", "\"publish\"");
b1.directory(new File("C:\\Program Files\\Filebeat"));
b1.redirectErrorStream(true);
Process p1 = b1.start();

答案 1 :(得分:0)

以下代码有效。

        ProcessBuilder pb = new ProcessBuilder("C:\\Program Files\\Filebeat\\filebeat.exe", "-c", "C:\\Program Files\\Filebeat\\filebeat.yml", "-e");
        pb.redirectErrorStream(true);
        Process p = pb.start();

        BufferedReader bri = new BufferedReader(new InputStreamReader(p.getInputStream()));

        String line;
        while ((line = bri.readLine()) != null) {
           System.out.println(line);
        }
        p.waitFor();