我正在尝试使用 ProcessBuilder 从运行在 WebSphere Application Server 上的 Servlet 在我的 Linux 服务器上执行 shell 脚本。
代码返回 0(使用 .waitFor()),但脚本似乎没有执行。如果我给脚本设置了一个无效的路径,我会得到一个“找不到文件”异常,所以我知道它正在查找脚本......但似乎没有执行。
该脚本本身调用另一个脚本,该脚本最终应该输出一个 zip 文件(我还有一个“触摸”行,看看那里是否发生了任何事情……但什么也没做)。
该脚本从命令行运行良好,使用与我通过 .start() 传递的相同命令。
这是我的 Servlet 的一个片段:
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
谢谢。