我想用java在特定位置运行脚本。运行良好,如果我手动运行该脚本:Runtime.exec没有运行但没有例外
/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.它会生成文本其他脚本。 DAT,然后SFTP发布到服务器B.当手动运行它,txt.dat成功生成并传送到服务器B.
更新3
感谢所有帮助和建议。事实证明,我的Java应用程序在不同的用户下运行。当我手动运行它时,我使用了另一个用户。所以,我已经将服务器B的主机密钥添加到服务器A.现在它已成功运行。
你能打印pathServer的值吗? –
你检查了在控制台上手动运行的命令吗? ,它工作正常吗? –
@Sudhanshu:pathServer是“/ export/home”。我已经验证过它。 – angel