我想使用 java 在某个位置运行脚本。如果我手动运行脚本运行良好:
/export/home/trace.sh param1 param2 param3 param4
这是我从 java 运行脚本的代码:
try {
Runtime runtime = Runtime.getRuntime();
Process proc = null;
System.out.println("starting search");
proc = runtime.exec( pathServer + "/trace.sh " + fullDate + " " + fullDateTo + " " + mA.substring(2) + " " + mB.substring(2));
InputStream inputstream = proc.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
System.out.println("end search " + System.currentTimeMillis());
}
catch (Exception e)
{
System.out.println(e.toString());
e.printStackTrace();
}
如果脚本运行,它将在指定位置生成“txt.dat”。但是没有生成“txt.dat”。我试图弄清楚异常是什么,但没有异常捕获。
我的代码已经正确了吗?我怎么知道它是否正在处理脚本?以及如何捕捉过程中发生的任何异常?谢谢。
更新 2
我添加了一些代码来打印getInputStream
和getErrorStream
. 对于getInputStream
,我什么都没有,这意味着它是空的。因为getErrorStream
,我得到了这个结果
Host key verification failed
我仍然不知道这个错误是什么意思。
Java 应用程序在服务器 B 中运行。
通常,我尝试调用的脚本(在服务器 B 中)将 ssh 到服务器 A 并在服务器 A 中运行其他脚本。它将生成 text.dat,然后 sftp 到服务器 B。手动运行时,txt.dat 成功生成并传输到服务器 B。
更新 3
感谢所有帮助和建议。事实证明,我的 java 应用程序在不同的用户下运行。当我手动运行它时,我使用了另一个用户。因此,我已将服务器 B 的主机密钥添加到服务器 A。它现在运行成功。