【发布时间】:2019-07-22 10:33:59
【问题描述】:
我们有一个用例将 > 4GB 的数据文件从 sftp 站点传输到服务器盒。我们决定创建一个 java 服务,该服务将调用一个 shell 脚本,实习生进入 sftp 站点和路径并将文件获取到目标目的地。
我们编写了以下代码来从 Java 文件调用 shell 脚本。
Process proc = null;
String command = "/mnt/hmdata/loadTest.sh";
System.out.println("passing command::" + command);
try {
Runtime rt = Runtime.getRuntime();
proc = rt.exec(command.trim());
boolean status = proc.waitFor `enter code here` (45, TimeUnit.SECONDS);
LOGGER.log(Level.INFO, "Shell Called successfully");
if (status) {
msg = "Shell Called successfully";
} else {
msg = "Error while calling Shell";
}
} catch (IOException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
proc.destroy();
}
shell脚本是这样的
sshpass -p '<password>' scp -r <userid>@<host>:/finint/inbound/financial/tenv/edw_osccl/* .
一旦我调用我的 java 服务,我们的服务就无法启动 shell。相反,相同的外壳在服务器命令提示符下工作正常。我们正在从 Unix 运行我们的程序。
你能提出解决方案吗?
【问题讨论】:
-
shell 只包含以下命令 sshpass -p '
' scp -r @ :/finint/inbound/financial/tenv/edw_osccl/* . -
上面的代码是用独立的jar写的吗?你有任何例外吗?您在 msg 变量中获得的数据是什么?
-
我们已将其公开为 REST Web 服务。 Java 部分存在于部署在 weblogic 12.2.1.1 中的 ear 文件中,并且在调用 shell 时我们没有遇到任何异常。等待 45 秒后,状态为布尔值“False”。
-
stackoverflow.com/questions/525212/… 试试看上面的问题和使用java执行shell的代码
标签: java shell unix weblogic12c