我想用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