使用ansible.builitin.env获取PATH异常,跨发行版Java验证失败问题
问题详情
我的Ansible角色执行以下操作:
- 创建名为
weblogic的用户,指定bash为Shell,配置主目录并将其加入weblogic组 - 将JDK解压到
oracle_home目录,设置归属为weblogic用户
设置环境变量任务
- name: Set become: true become_user: weblogic set_fact: newpath: "{{JAVA_HOME}}/bin:{{lookup('ansible.builtin.env', 'PATH')}}"
执行后得到的newpath值为:
"/opt/oracle/jdk1.8.0_431/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
验证任务异常情况
- name : Validate Java become: true become_user: weblogic command: "java -version" environment: JAVA_HOME: "{{JAVA_HOME}}" PATH: "{{newpath}}" register: javaver
- 在Ubuntu 24系统上,检测到的Java路径为
/usr/bin/java,并非预期的JDK路径 - 在SUSE SLES15系统上,能正常得到预期的Java路径
手动执行测试结果
直接以weblogic用户身份在两台主机上执行以下命令:
export JAVA_HOME=/opt/oracle/jdk1.8.0_431 export PATH="/opt/oracle/jdk1.8.0_431/bin:$PATH"
java -version
结果差异:
- Ubuntu主机报错:
bash: /opt/oracle/jdk1.8.0_431/bin/java: No such file or directory
- SUSE主机正常输出:
java version "1.8.0_431"
内容的提问来源于stack exchange,提问作者groovehunter
相关产品推荐
相关产品推荐

