我正在尝试使用apache-commons-exec运行脚本,该脚本是使用java近似运行实现的。这个脚本在生产服务器(Linux)中执行,但我需要在我的localhost中测试它,看看一切正常。
这是启动cygwin的代码,这段代码在cmd.exe中运行,但是当我尝试使用commons.exec启动它时它不起作用:
OutputStream outputStream = new ByteArrayOutputStream();
DefaultExecutor exec = new DefaultExecutor();
exec.setWatchdog(new ExecuteWatchdog(1000));
PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream);
exec.setStreamHandler(streamHandler);
CommandLine cmdLine = CommandLine.parse("C:\\cygwin64\\bin\\bash");
cmdLine.addArgument("-c");
cmdLine.addArgument("/cygdrive/c/dev/launch.sh");
int exit = exec.execute(cmdLine);
logger.warn("Job exit: " + exit);
它返回1并且没有输出或日志错误:
org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
有什么遗漏?如何正确捕获输出?
答案 0 :(得分:0)
有点猜测这可能会有所帮助。
有时exit code = 1
代表"成功"。但是,默认情况下,Apache Commons Exec将exit code = 1
解释为失败,如果相关脚本退出并使用ExecuteException
,则会抛出exit code = 1
。
您可以告诉DefaultExecutor
" exit code = 1
=成功"使用以下代码:
exec.setExitValue(1);
可能不是原因,但值得一试。