0

実行する Java 近似を使用して実装された apache-commons-exec を使用してスクリプトを実行しようとしています。このスクリプトは実稼働サーバー (Linux) で実行されますが、ローカルホストでテストして、すべてが正常に機能することを確認する必要があります。

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)

何か足りないものはありますか?出力を適切にキャッチするにはどうすればよいですか?

4

1 に答える 1

0

これは少し推測ですが、役立つかもしれません。

exit code = 1は「成功」を表すこともあります。ただし、Apache Commons Exec はデフォルトで を失敗として解釈し、問題のスクリプトが および で終了しexit code = 1た場合に をスローします。ExecuteExceptionexit code = 1

次のコードを使用して、DefaultExecutor「 = 成功」であることを伝えることができます。exit code = 1

exec.setExitValue(1);

理由ではないかもしれませんが、試してみる価値はあります。

于 2016-03-23T10:57:51.153 に答える