ansible遠程執行尋找不到環境變量問題


ansible遠程執行尋找不到環境變量問題

問題:

ansible調用command遠程啟動服務,找不到JAVA_HOME。 

然而:

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_181 

export JRE_HOME=${JAVA_HOME}/jre 
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib 
export PATH=${JAVA_HOME}/bin:$PATH


都已經寫在/etc/profile中並source生效,登錄遠端服務器echo  $JAVA_HOME又正常。

排查過程:

首先,在腳本中添加echo $JAVA_HOME ,which java ,echo $(whoami),然后用ansible遠程執行,發現為root用戶但輸出為空和找不到java;
其次,在~/.bash_profile中添加環境變量,用ansible遠程執行腳本,發現依然輸出為空和找不到java環境變量;
最后,考慮ansible執行的環境變量與登錄時使用的環境變量不同,所以將JAVA_HOME寫在/etc/bashrc中,用ansible遠程執行腳本,發現執行正常;
至此,確定ansible執行過程中並未調用/etc/profile和~/.bash_profile

原因:

ansible遠程執行的是non-login shell 並不會加載/etc/profile和~/.bash_profile下的環境變量,只加載~/.bashrc和/etc/bashrc
如果需要在ansible中執行需要特定環境變量的命令,將環境變量寫在~/.bashrc ,然后source一下~/.bash_profile。

總結:

為了可持續交付以及讓自己能保持優雅的操作帥姿,強烈要求以后都將java/nginx/mvn等環境變量寫入~/.bashrc ,然后source一下~/.bash_profile。

eg:

[root@vm172-31-0-2 script]# cat ~/.bashrc
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_181
export JRE_HOME=/usr/lib/jvm/jdk1.8.0_181/jre
export CLASSPATH=.:/usr/lib/jvm/jdk1.8.0_181/lib:/usr/lib/jvm/jdk1.8.0_181/jre/lib
export PATH=/usr/lib/jvm/jdk1.8.0_181/bin:/usr/lib/jvm/jdk1.8.0_181/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM