ansible遠程執行尋找不到環境變量問題
問題:
ansible調用command遠程啟動服務,找不到JAVA_HOME
。
然而:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_181 export JRE_HOME=${JAVA_HOME}/jre |
---|
都已經寫在/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 # User specific aliases and functions alias rm='rm -i' # Source global definitions
|
---|