0

我正在尝试从 java 类中调用我的 rrdtool cmd,但不知道该怎么做。

我已经从我的终端测试了我的 RRDTool cmd,它是成功的,见下文。

rrdtool update mydb.rrd 1385056701:6:5

我如何从 java 类执行这个 cmd?

4

6 回答 6

2

您可以使用以下命令格式来运行您的 Linux 命令。

Runtime r = Runtime.getRuntime();
Process p = r.exec(yourcmd);

请通过从 Java 中运行 unix 命令无法在 Java-Stackoverflow 中运行 Unix 命令

希望您能在这里得到答案。

于 2013-11-21T18:21:27.867 回答
1

尝试这个

        public class ShellTest {
    public static void main(String[] args) throws java.io.IOException, java.lang.InterruptedException {
        // Get runtime
        java.lang.Runtime rt = java.lang.Runtime.getRuntime();
        // Start a new process: UNIX command ls
        java.lang.Process p = rt.exec("ls");
        // Show exit code of process
        System.out.println("Process exited with code = " + rt.exitValue());
    }
}

也可以在这里查看更多细节

于 2013-11-21T18:15:45.073 回答
0

为此,您可以使用 Runtime#exec。如果您想要对已启动的进程进行类似 Java 的控制,那么有一个名为 zt-exec 的出色库,它使处理进程变得更加容易。与 Java 标准库附带的 Runtime#exec 相比,ProcessBuilder 还提供了一个小的 API 改进。

您必须注意的是,Java 进程为输入和输出流提供了非常少的缓冲区,一旦这些缓冲区满了就会阻塞进程。这无声无息地发生。zt-exec 可以帮助您。

于 2013-11-21T18:16:45.067 回答
0

试试这样正如paxdiablo回答的那样):

public static void main(String args[]) {
        String s;
        Process p;
        try {
            p = Runtime.getRuntime().exec("ls -aF");
            BufferedReader br = new BufferedReader(
                new InputStreamReader(p.getInputStream()));
            while ((s = br.readLine()) != null)
                System.out.println("line: " + s);
            p.waitFor();
            System.out.println ("exit: " + p.exitValue());
            p.destroy();
        } catch (Exception e) {}
    }

另请检查java.lang.Runtime.exec了解详细信息。

在单独的进程中执行指定的字符串命令。

这是一种方便的方法。调用 exec(command) 形式的行为与调用 exec(command, null, null) 完全相同。

于 2013-11-21T18:18:16.120 回答
0

你可以看看: https ://github.com/OpenNMS/opennms/blob/master/opennms-rrd/opennms-rrd-rrdtool/opennms-rrdtool-api/src/main/java/org/opennms/netmgt /rrd/rrdtool/JniRrdStrategy.java

在java中实际使用rrdtool。或在 https://code.google.com/p/rrd4j/

对于 java 中 rrdtool 的本机版本。

于 2013-11-22T14:04:05.280 回答
0

我在 java 程序中运行了我的 rrdtool 命令,如下所示:

    Process p = null;
    try {

        ProcessBuilder pb = new ProcessBuilder("/usr/bin/rrdtool","lastupdate", rrdPath);

        pb.redirectErrorStream(true);
        p = pb.start();
        int exitVal = p.waitFor();
        if (exitVal == 0)
            System.out.println("exitVal of rrdLastUpdate is Successful");
        else
            System.out.println("exitVal of rrdLastUpdate is Abnormal");

    } catch (Exception e) {
        System.out.println("Problem in executing rrdlastupdate()");
        e.printStackTrace();

    }//end of try-catch

我希望这对 U 有用:) 我在 java 中使用了其他一些 rrdtool 命令。如果您需要更多帮助,我将很乐意提供帮助。

于 2013-12-26T11:50:21.547 回答