【发布时间】:2017-08-09 20:10:51
【问题描述】:
我们需要通过 ssh 从服务器 1 上的脚本在服务器 2 上运行 java 程序。当我登录到服务器 2 并运行 java 程序时,它可以工作。 但是,当我尝试使用 ssh 从服务器 1 触发 java 程序时,它会抛出 java not found 异常。
java 路径存在于服务器 2 上的 bashrc 文件中(/home/java/jdk_1.7/bin/java),服务器 2 上的“which java”也显示了该路径,这解释了为什么直接在服务器 2 工作正常。
除了 bashrc 之外,是否还有其他文件应该存在 java 路径,以便在从不同服务器的脚本调用时检测到 java
添加代码的相关部分 服务器 1 上的脚本
#!/bin/bash
MAIN_CLASS = “com.appStarter.main”
JAVA_CONFIG = “$PATH:/home/java/java_1.6/bin” ($PATH on this box has /app/java/jdk_170_100_64/bin)
USER_NAME= sudoUserName
START_COMMAND = java $MAIN_CLASS $USER_NAME
eval “$START_COMMAND”
调用一个通过 ssh 进入服务器 2 的 java 程序。下面是这个 java 程序的摘录
public String ssh(String host, String command)
String ssh = “/usr/bin/ssh”
String result = triggerCommand(ssh, “-a”, host, command)
return result;
}
public String triggerCommand(final String… command){
ProcessBuilder processBuilder = new ProcessBuilder(command);
Process process = processBuilder.start();
InputStream iS = process.getInputSteam();
Reader reader= new BufferedReader(new InputStreamReader(iS));
String output=””;
…output will contain the output from the reader
}
在上面的类中,host 是 2,command 是一个 unix 命令,如下所示的 startComponent.sh
#!usr/bin/ksh
MAIN_CLASS = “com.componentStarter.main”
START_COMMAND = java $MAIN_CLASS
eval “$START_COMMAND”
我们的 bash_profile 和 profile 包含如下 bashrc 并设置路径如下所示
if [ if ~/.bashrc ]; then
. ~/.bashrc
fi
PATH = $PATH (where $PATH includes /app/java/jdk170_5-64b/bin)
EXPORT PATH
【问题讨论】:
-
你必须显示你使用的确切命令,否则很难知道发生了什么。
-
从 bashrc 复制代码到你的脚本
-
对
PATH的修改应在.bash_profile中,以便在登录shell 中进行。从登录 shell 调用的任何其他 shell 通过环境继承修改后的路径。 -
已在问题中添加了其他详细信息。我们的 bash_profile 包括 java 路径以及已编辑问题中显示的内容