GlassFish 4.1.2 DAS远程执行命令/启动实例遇Java未找到错误
问题核心
DAS通过SSH ping节点或启动实例时触发java: not found错误,但节点本地能正常启动实例,说明SSH会话的环境变量与本地登录会话不一致——DAS发起的SSH连接属于非交互式/非登录Shell,不会加载本地登录时生效的环境配置,导致Java路径未被正确识别,即便你手动设置过AS_JAVA也可能没在SSH会话中生效。
具体解决步骤
确保节点SSH会话加载Java环境配置
登录节点服务器,编辑~/.bashrc(若使用bash Shell),添加以下配置:export JAVA_HOME=/绝对路径/到你的jdk export PATH=$JAVA_HOME/bin:$PATH export AS_JAVA=$JAVA_HOME注:部分系统中,非交互式Shell仅读取
~/.bashrc,而~/.bash_profile仅在登录Shell加载,因此务必将配置放在~/.bashrc中;若你的~/.bash_profile未调用~/.bashrc,可以在~/.bash_profile末尾添加source ~/.bashrc。强制DAS用登录Shell连接节点
在DAS服务器上执行以下命令,修改节点的SSH连接配置,让SSH以登录Shell模式执行命令:asadmin set node-config.<mynode02>.ssh.command="bash -lc"执行完成后重新验证:
asadmin ping-node-ssh --validate=true <mynode02>直接在节点的GlassFish配置中指定AS_JAVA
登录节点服务器,编辑/usr/local/server/glassfish4/glassfish/config/asenv.conf,添加或修改:AS_JAVA=/绝对路径/到你的jdk确保路径为绝对路径,且DAS通过SSH能访问该文件。
验证SSH会话的环境变量
在DAS上执行以下命令,检查SSH会话的环境变量是否正确加载:ssh node02.cloud.com 'echo $PATH; echo $AS_JAVA; echo $JAVA_HOME'输出中应包含Java的安装路径,若未包含则说明配置未生效,需检查配置文件的加载逻辑。
总结
这类问题的根源是Shell环境差异,通过调整环境配置的加载范围,或强制SSH使用登录Shell,就能让DAS在远程操作节点时正确识别Java环境。
内容的提问来源于stack exchange,提问作者Anurag Kumar Mishra

