2012-03-08 46 views
0

我構建了一個運行命令「jps」的Java程序,通過從JPS命令的輸出中提取其ID來查看所有JVM並殺死特定的JVM。它在ubuntu終端上運行時工作正常。但後來我在bash中寫了一個腳本來從其他機器ssh那臺機器並在那裏運行這個程序。Java程序運行但不在bash腳本中

ssh $host "java -cp daemon.jar JVMname;" 

現在問題來了。

Exception in thread "main" java.io.IOException: Cannot run program "jps": error=2, No  such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) at runtime.daemon.halt.main(halt.java:19) 
Caused by: java.io.IOException: error=2, No such file or directory at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess.<init>(UNIXProcess.java:135) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:130) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1021) 

如果我自己去機器並運行這個相同的命令,它的工作原理。我不想切換到exec解決方案。

任何想法 感謝

+2

這是一個重複這個問題(交互式shell):http://stackoverflow.com/questions/940533/how-do-i-set-path-such-that-ssh-userhost-command-works – nwinkler 2012-03-08 12:04:34

+1

你可以發佈遠程服務器的內容〜/。 bashrc'文件? – nwinkler 2012-03-09 07:08:44

回答

2

這不是一個Java問題本身,它的下跌在這兩種情況下在你的環境的差異。具體來說,當您交互式運行時,您的$PATH變量包含jps的目錄,而在後一種情況下,通過SSH則不包含該目錄。

看一看在遠程機器上的.bash_profile.bashrc文件 - 我懷疑路徑將在.bash_profile文件,這是不是對非登錄shell執行(如您的SSH調用運行一個單一的設置命令)。如果您在.bashrc中正確設置了路徑,那麼您當前的調用應該開始工作。

(注意:這裏假設你使用bash的外殼,但大多數其他炮彈有登錄shell和非登錄shell初始化文件之間的類似的區別。)

+0

感謝您的回覆。 .bashrc已設置,但我沒有設置.bash_profile。我不確定它會做什麼。但你指出正確。我跑這 -bash-3.2 $ SSH計算-0-8 「PWD」 /export/home2/shujaat.hussain -bash-3.2 $ SSH計算-0-8 「JPS」 慶典:JPS:命令未找到 因此,jps沒有運行,但是當它運行良好。什麼不見​​了? – shujaat 2012-03-08 12:13:41

+2

看看我鏈接的問題,它解釋了從非交互式shell(ssh)執行哪個文件:http://stackoverflow.com/questions/940533/how-do-i-set-path-such- that-ssh-userhost-command-works – nwinkler 2012-03-08 12:17:58

+0

謝謝@nwinkler。儘管我通過你提供的鏈接找出了問題,但我仍然在掙扎。我非正式地迴應道路,$ PATH與我在交互式終端上工作的不一樣。正常的SSH揭示了更長的路徑。任何想法如何可以導出整個路徑。問題是「jps」不能運行,如果整個路徑沒有被導出,現在只發生在我們常規的ssh時。謝謝 – shujaat 2012-03-09 03:20:40