【问题标题】:Process builder returns exit code 127 when running a Kshell script运行 Shell 脚本时,进程构建器返回退出代码 127
【发布时间】:2015-07-16 18:42:41
【问题描述】:

我正在尝试通过 Java 进程构建器运行 Kshell 脚本。该脚本本身在服务器上运行时可以完美运行。但是,当我通过进程构建器运行它时,我得到了退出代码127 - command not found

代码:

ProcessBuilder procBuilder = new ProcessBuilder(command);
procBuilder.directory(new File(codeDir));
proc = procBuilder.start();
errorCode = proc.waitFor();

return errorCode;

我的命令如下:

[/bin/ksh, -c, myscript.ksh, 20150714]

我使用以下命令自行在服务器上运行脚本:

ksh -x myscript.ksh 20150714

知道这里出了什么问题吗?

【问题讨论】:

  • 您确定myscript.kshcodeDir 中吗?
  • 是的,我确实有脚本。我正在考虑使用common-exec。希望它能解决这些问题。
  • 您确定ksh 位于/bin/ksh
  • 是的,我查过了。它就在那里,不得不做所有这些事情真是太痛苦了。所以我尝试了 common-exec 并且它在第一次尝试中起作用。终于解脱了。感谢您的帮助,不胜感激.. :)
  • 我只在一台服务器上遇到了完全相同的问题...无法弄清楚原因。使用 common-exec 不是一种选择,因为它缺少我需要的高级功能......

标签: java process runtime.exec processbuilder


【解决方案1】:

放弃了 procesbuilder 并尝试了 common-exec 并且效果很好。这是我更新的代码:

CommandLine cmdLine = CommandLine.parse(command);

for (String comm : cmd)
{
    cmdLine.addArgument(comm);
}

DefaultExecutor exec = new DefaultExecutor();
exec.setExitValue(0);
exec.setWorkingDirectory(new File(codeDir));
exitCode = exec.execute(cmdLine);

希望它对未来的人有所帮助。

【讨论】:

  • 我在流程构建器方面有类似的经验,并开始使用 common-exec。
【解决方案2】:

ProcessBuilder 这样做是因为它在 PATH 上找不到您的脚本。只需使用 ProcessBuilder 执行命令 echo $PATH。你会看到“它的”PATH 是不同的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 2020-02-19
    • 1970-01-01
    相关资源
    最近更新 更多