ryekayo
ryekayo

Reputation: 2421

Unable to run linux commands using Java

I am using ProcessBuilder to run a Linux command on a server:

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

I am trying to broadcast a message that will be piped to a paging system called bar. But when executing the jar file on the server, I constantly get this:

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

It's my first time using ProcessBuilder (I have also tried with Runtime.exec() as well). Can someone tell me what I may do to correct the command I am trying to run?

Upvotes: 1

Views: 420

Answers (2)

ryekayo
ryekayo

Reputation: 2421

I have figured out a way of getting this working. It took a bit of experimenting but here is what I did.

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

I had it log the stdout to a text file and confirmed that the broadcast works.

Upvotes: 0

Henry
Henry

Reputation: 43738

Read the error message carefully: you try to execute the program /usr/bin/printf %b which of course does not exist.

The program is called /usr/bin/printf.

Upvotes: 1

Related Questions