2012-08-17 16 views
0

我有一個shell腳本test.sh,做所謂的呼喚貓:從shell而這又被Java EXEC

cat /home/tomcat/temp/tempLogFile.log > /home/tomcat/temp/logFile_test.log 

我是通過調用Runtime.getRuntime()調用test.sh從Java EXEC( 「test.sh」)

它創建logFile_test.log,但沒有寫入它。

如果我直接從shell運行腳本,它工作正常。 可能會出現什麼問題?

感謝,

UPDATE:Interstingly,它工作正常,如果我做

echo 'cat /home/tomcat/temp/tempLogFile.log > /home/tomcat/temp/logFile_test.log' | at now 

但我不能使用at now,因爲我需要等待貓完成

+1

也許添加2>&1,並期待在文件中看到,如果貓打印錯誤消息 – 2012-08-17 01:26:03

+0

我試過2>&1,但仍然一無所獲。沒有錯誤。即使從Runtime.getRuntime()。exec(「test.sh」)進程的退出狀態是0 – figaro 2012-08-17 01:49:48

回答

0

也許你的命令路徑弄亂?該命令將創建logFile_test.log,即使它不能運行cat程序。嘗試添加如下內容:

set > /tmp/dump.txt 

到shell腳本。這會將進程的環境變量的副本寫入/tmp/dump.txt。檢查這些可能會幫助您找出問題所在。

另一種可能是磁盤已滿。在這種情況下,您可以創建空文件,但不能將任何數據寫入它們。

+0

我試過了。 set> /tmp/dump.txt將內容轉儲到文件中。但只是該文件並使用重定向轉儲其內容不起作用 – figaro 2012-08-17 18:42:28

0

一旦你調用getRuntime().exec("ANY_COMMAND");,它會返回一個Process實例,使用進程對象可以獲得輸入和輸出流,然後將任何其他命令傳遞給同一個進程或讀取輸出,爲此目的,你有三個流連接

  1. 輸出流: - 給你控制發送更多的參數或命令,以同樣的過程
  2. 輸入流: - 給你控制以從工藝
  3. 錯誤流的標準輸出讀出的值: - 爲您提供執行任何c期間發生的所有錯誤ommand。

即使你有任何錯誤,你可以檢查錯誤流,看看有什麼問題。

您可以參考Java process.getInputStream() has nothing to read, deadlocks child

+0

是的我試圖從錯誤流獲得輸出,但沒有在那裏。即使進程的退出狀態返回0 – figaro 2012-08-17 18:40:19