jenkins 執行遠程腳本問題


ssh在遠程連接服務器執行命令的時候,經常會遇到環境變量的問題,如下:

/data/resin-pro-4.0.49/bin/resin.sh: line 44: exec: java: not found

如果出現上面的提示,則說明環境變量配置有問題。
先來說解決辦法

解決

  • 目標服務器上/etc/profile文件,拷貝文件中的環境變量,例如JAVA_HOME, PATH等等
  • 將環境變量拷貝至~/.bashrc文件保存

source ~/.bashrc

問題解決!

原因及拓展

這里就要說明bash有兩種方式interactive + login shell模式和non-interactive + non-login shell模式
在服務器上執行命令,走的是interactive + login shell模式,而通過遠程登錄執行命令,走的是non-interactive + non-login shell模式。
這兩種模式對於環境變量的讀取是有區別的。

  • interactive + login shell模式

Shell首先會加載/etc/profile文件,然后再嘗試依次去加載下列三個配置文件之一,一旦找到其中一個便不再接着尋找:
~/.bash_profile
~/.bash_login
~/.profile

  • non-interactive + non-login shell模式
    它不會去執行/etc/profile文件,而會去用戶的HOME目錄檢查.bashrc並加載

所以當遠程執行命令時,我們只需要讓~/.bashrc文件中的環境變量與/etc/profile中的環境變量一致即可!





免責聲明!

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



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