当使用ssh从脚本运行java程序时,bashrc是否用于查找java

时间:2017-03-18 07:08:28

标签: bash ssh

我们需要通过ssh从服务器1上的脚本在服务器2上运行java程序。当我登录到服务器2并运行java程序时,它可以工作。 但是,当我尝试使用ssh从服务器1触发java程序时,它会抛出java not found异常。

java路径存在于服务器2上的bashrc文件中(/home/java/jdk_1.7/bin/java),服务器2上的“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和个人资料包含如下所示的bashrc,并设置如图所示的路径

if  [  if ~/.bashrc ]; then
          . ~/.bashrc
fi

PATH = $PATH (where $PATH includes /app/java/jdk170_5-64b/bin)
EXPORT PATH

1 个答案:

答案 0 :(得分:0)

您是以root用户还是以用户身份进行搜索?如果你以ssh作为用户和sudo之后,通过" sudo -s"检查你的路径。或" sudo -i" 如果它返回错误的路径变量,请将其添加到自定义的visudo文件中 例如在/ etc / sudoers中:

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"