0

我正在尝试使用以下代码从 java 执行 perl 脚本:

    ProcessBuilder script =
    new ProcessBuilder("/opt/alert-ssdb.pl");
    Process tmp =  script.start();

但是当我执行它时它会返回

 java.io.IOException: Cannot run program "/opt/alert-ssdb.pl": java.io.IOException: error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:488)
at scripttest.main(scripttest.java:11)
Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.<init>(UNIXProcess.java:164)
at java.lang.ProcessImpl.start(ProcessImpl.java:81)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:470)
... 1 more

关于文件

ls -l alert-ssdb.pl
-rwxr-xr-x. 1 root root alert-ssdb.pl

我尝试使用脚本作为参数运行 /usr/bin/perl/ ,但它也因相同的异常而失败。

/bin/ls 和其他简单的命令运行没有问题。脚本的第一行也是 #!/usr/bin/perl 并且在命令行上运行时它可以工作

我错过了什么?

//更新:大局是我试图通过风暴螺栓调用脚本,但此时它失败了。我设法通过使用将python脚本定义为螺栓来使其工作

 super(python,myscript.py)

(myscript 导入storm 库)并从myscript 我调用perl 脚本。我还没有尝试过,但我想如果我将 perl 脚本修改为风暴螺栓,它将运行良好。

4

1 回答 1

1

尝试改变

    new ProcessBuilder("/opt/alert-ssdb.pl");

至:

    new ProcessBuilder("/usr/bin/perl", "/opt/alert-ssdb.pl");

我有过使用ProcessBuilder.

编辑以反映@dcsohl 的评论。

于 2013-10-31T17:29:30.800 回答