【问题标题】:Is bashrc used to find java when running a java program from a script using ssh使用 ssh 从脚本运行 java 程序时,bashrc 是否用于查找 java
【发布时间】: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 路径以及已编辑问题中显示的内容

标签: bash ssh


【解决方案1】:

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

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

【讨论】:

  • 我们在调用脚本时以 root 身份 ssh
  • 为什么你的 startComponent.sh 是用 ksh 调用的?我猜 .bashrc 只适用于 bash
  • 在profile、bash_profile和bashrc中也添加了java路径,所以即使ksh也应该得到正确的路径
猜你喜欢
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 2019-12-16
  • 2013-01-04
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 1970-01-01
相关资源
最近更新 更多