2017-03-18 100 views
0

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

java路径存在于服务器2(/home/java/jdk_1.7/bin/java)上的bashrc文件中,服务器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程序

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 
} 

在上述类摘录的Java程序,主机2和命令是一个UNIX COM普通话像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 
+0

您必须显示您使用的确切命令,或者很难分辨发生了什么。 –

+0

将代码从bashrc复制到脚本 – YOU

+0

对'PATH'的修改应该在'.bash_profile'中,以便它们在登录shell中生成。从登录shell调用的任何其他shell会通过环境继承修改后的路径。 – chepner

回答

0

你ssh方式连接以根用户或用户?如果你以后使用sudo作为用户,请通过“sudo -s”或“sudo -i”检查你的路径如果它返回错误的路径变量,将它添加到一个自定义的visudo文件 ,例如在/ etc/sudoers中:

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

我们在调用脚本时以ssh作为sshsh – vjm

+0

为什么用ksh调用startComponent.sh?我猜.bashrc只适用于bash – fabi186

+0

java路径也添加在配置文件,bash_profile和bashrc中,所以即使ksh也应该得到正确的路径 – vjm