ProcessBuilder を使用して、WebSphere Application Server で実行されているサーブレットから Linux サーバーでシェル スクリプトを実行しようとしています。
コードは (.waitFor() を使用して) 0 を返しますが、スクリプトは実行されていないようです。スクリプトに無効なパスを入力すると、「ファイルが見つかりません」という例外が発生するため、スクリプトを見つけていることはわかっていますが、実行されていないようです。
スクリプト自体は、最終的にzipファイルを出力する別のスクリプトを呼び出します(何かが起こっているかどうかを確認するための「タッチ」行もありますが、何もしていません)。
スクリプトは、.start() で渡しているのと同じコマンドを使用して、コマンド ラインから正常に実行されます。
ここに私のサーブレットからのスニペットがあります:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("in doPost");
System.out.println("about to kick off ProcessBuilder");
ProcessBuilder pb = new ProcessBuilder("/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/localhostNode01Cell/Svc_war.ear/Svc.war/test.sh");
pb.redirectErrorStream(true);
Process process = pb.start();
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
int ch;
while ((ch = br.read()) != -1)
System.out.println((char)ch);
br.close();
try {
int exitVal = process.waitFor();
System.out.println("Exit Value: " + exitVal);
} catch (InterruptedException e) {
e.printStackTrace();
}
.redirectErrorStream() と .getInputStream() は、他の人が参照しているバッファの問題に遭遇する可能性があるかどうかを確認するためのものでした (ただし、.waitFor() が 0 を返すとは思わない場合でも)。
これは ProcessBuilder への私の最初の進出なので、明らかな何かが欠けていることを願っています。
アイデア/ヒントをいただければ幸いです。
そうそう...これが私が得る出力です:
[4/5/13 21:32:41:791 PDT] 0000004d SystemOut O in doPost
[4/5/13 21:32:41:791 PDT] 0000004d SystemOut O about to kick off ProcessBuilder
[4/5/13 21:32:41:818 PDT] 0000004d SystemOut O Exit Value: 0
ありがとう。