ansible远程执行指令,/bin/sh: java: command not foundnon-zero return code

问题描述:ansible远程执行指令,初选指令加载不全,

[root@VM-0-6-centos ~]# ansible all -m shell -a "java -version"
10.206.0.15 | FAILED | rc=127 >>
/bin/sh: java: command not foundnon-zero return code

解决方案:【ansible问题处理】远程执行用户环境变量加载问题_ansible 加载环境变量_一边学习一边哭的博客-CSDN博客

终极解决方法(1): 

#cd /application 
#tar xzf jdk-8u144-linux-x64.tar.gz -C /application/
mv /application/jdk1.8.0_144  /application/jdk
cat >> /etc/profile.d/java.sh << EOF
export JAVA_HOME=/application/jdk
export PATH=$JAVA_HOME/bin:$PATH
EOF
source /etc/profile.d/java.sh

经过测试,这个可以直接在ansible中使用,自动加载,不过需要在宿主机中source一下

(2)终极解决方法

思路:

 

       用SSH客户端(比如Putty)登陆Linux系统时,要求输入用户名/密码登录或根据SSH key登录时,就是login shell。
       运行man bash可以查看环境配置文件的说明,以CentOS7为例:
       1. /etc 下的是系统环境配置,对所有用户有效,但是/etc/profile只对login shell有效,而/etc/bashrc对login shell和non-login shell都有效。
       2.  ~下的是当前用户环境配置,当前用户环境配置会继承/etc系统环境配置。 
      login shell加载环境变量的顺序是:
           ①/etc/profile
           ②~/.bash _profile
           ③~/.bashrc
           ④/etc/bashrc
    而non-login shell加载环境变量的顺序是:
           ①~/.bashrc
           ②/etc/bashrc
        ansible这类远程执行的non-login shell 并不会加载/etc/profile和~/.bash_profile下的环境变量,只是加载~/.bashrc和/etc/bashrc。
        测试1:  三台机器,用ansible管理,其中1台直接在vim /etc/bashrc,添加java环境变量,然后ansible批量执行,发现设置/etc/bashrc的那台执行成功。直接账号密码中shell登录,使用java环境变量,也会报错没有。

直接

cat >> /etc/bashrc << EOF
export JAVA_HOME=/application/jdk
export PATH=$JAVA_HOME/bin:$PATH
EOF

(3)命令使用绝对路径

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值