2012-04-21 55 views
0

你好,我需要一個IP地址,SSH和通過shell腳本運行 我的Java代碼,我通過這種方式SSH -ing和編譯java程序

ssh $LINE java -Djava.library.path=/N/u/sbpatil/ds/Project4/demons/Project4Lib -cp "/N/u/sbpatil/ds/Project4/demons:/N/u/sbpatil/ds/Project4/demons/Project4Lib/jug-uuid.jar:/N/u/sbpatil/ds/Project4/demons/Project4Lib/NaradaBrokering.jar:/N/u/sbpatil/ds/Project4/demons/Project4Lib/sigar.jar" PublisherClient >> output2 & 

但輸出2文件中不存在任何輸出做到這一點。即使java的運行命令給我一個錯誤,該錯誤應該寫入該文件中,但它不會被寫入。 任何人都可以請告訴我,我應該如何寫這個腳本?

+0

而不是在一行中做所有事情,你可以先ssh登錄到遠程機器,然後在那裏啓動java命令?這樣可以更容易地進行調試,因爲很清楚哪個部分的命令發生在哪臺機器上,例如,我不知道這個'>>是在遠程機器上還是在你的機器上完成的...... – cello 2012-04-21 18:29:04

+1

錯誤不會寫入輸出文件,除非你在最後&否則output2將僅包含標準輸出。 – Richante 2012-04-21 18:31:01

+0

實際上該文件是一個共享文件系統,以便>>命令將文件訪問到所有節點.. – 2012-04-21 18:48:45

回答

2

現在看起來你在後臺運行ssh,將輸出重定向到本地文件。 將命令行放入''中:ssh $LINE 'java ... 1>>output2 2>&1 &'

如果以這種方式啓動應用程序,也可以使用nohup

+0

你能告訴我2>&1&謝謝的意義! – 2012-04-21 20:41:52

+0

2>&1將STDERR(Java中的System.err,默認打印堆棧跟蹤)重定向到STDOUT(System.out,通常打印的地方)。因此,通過執行'2>&1',您可以在同一個文件中捕獲所有可能的輸出。很明顯,你可能會寫入不同的文件,但通常在啓動後臺進程時,重定向兩者是個好主意。 – 2012-04-21 20:58:50