2012-03-08 70 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