无法使用Java运行linux命令

时间:2017-05-18 17:28:55

标签: java linux

我正在使用ProcessBuilder在服务器上运行Linux命令:

ProcessBuilder pb = new ProcessBuilder("/usr/bin/printf %b", sendMessage,
                URL, " @serendipity | /usr/bin/perl /usr/local/bin/foo/bar -u nagios -s");

我正在尝试广播一条消息,该消息将通过管道传输到名为bar的分页系统。但是当在服务器上执行jar文件时,我经常得到这个:

java.io.IOException: Cannot run program "/usr/bin/printf %b": error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    at sms_serendipity.sms_serendipity.SmsSendMessage.sendMessage(SmsSendMessage.java:59)
    at sms_serendipity.sms_serendipity.SmsSendMessage.randomizeLinks(SmsSendMessage.java:48)
    at sms_serendipity.sms_serendipity.SmsParseWeb.regexHttp(SmsParseWeb.java:103)
    at sms_serendipity.sms_serendipity.SmsParseWeb.parseXML(SmsParseWeb.java:77)
    at sms_serendipity.sms_serendipity.SmsParseWeb.locateWebAudio(SmsParseWeb.java:44)
    at sms_serendipity.sms_serendipity.mainClass.main(mainClass.java:11)
Caused by: java.io.IOException: error=2, No such file or directory
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
    at java.lang.ProcessImpl.start(ProcessImpl.java:134)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    ... 6 more

这是我第一次使用ProcessBuilder(我也尝试过使用Runtime.exec())。有人能告诉我我可以做些什么来纠正我试图运行的命令吗?

2 个答案:

答案 0 :(得分:1)

仔细阅读错误消息:您尝试执行当然不存在的程序/usr/bin/printf %b

该程序名为/usr/bin/printf

答案 1 :(得分:0)

我找到了一种方法让这个工作。这需要一些实验,但这就是我所做的。

    ProcessBuilder pb = new ProcessBuilder(
            "/bin/dash", 
            "-c",
            "/usr/bin/perl /usr/local/bin/foo/bar -u nagios -s " + sendMessage + URL + fooUser,
            "/bin/echo");

我让它将stdout记录到文本文件中并确认广播有效。