Java程序在bash脚本中运行但不运行

时间:2012-03-08 11:55:43

标签: java bash ubuntu ioexception

我构建了一个运行命令“jps”的java程序,通过从JPS命令的输出中提取其id来查看所有JVM并杀死特定的JVM。当我在ubuntu终端上运行它时工作正常。但后来我用bash编写了一个脚本来从其他机器ssh该机器并在那里运行该程序。

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解决方案。

任何想法 感谢

1 个答案:

答案 0 :(得分:2)

这不是一个Java问题本身,这取决于两种情况下环境的差异。具体来说,当您以交互方式运行时,$PATH变量包含jps的目录,而在后一种情况下,它不包含。{/ p>

查看远程计算机上的.bash_profile.bashrc文件 - 我怀疑该路径将在.bash_profile文件中设置,该文件不会针对非登录执行shell(例如运行单个命令的SSH调用)。如果在.bashrc中正确设置路径,那么您当前的调用应该开始工作。

(注意这假设您正在为shell使用bash,尽管大多数其他shell在登录shell和非登录shell init文件之间有类似的区别。)