Linux為用戶設定環境變量


今天在做從將MySQL中的數據同步到ES的時候,當啟動腳本程序報錯:

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/xbib/tools/Runner : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

很明顯錯誤是由於JDK版本問題導致的。我所使用的elasticsearch-jdbc-2.3.3.1是由JDK1.8編譯的(由高版本編譯的class文件不能在低版本中運行,但是低版本可以在高版本中運行)

而我現在的環境中默認是JDK1.7所以導致錯誤的發生。

J2SE 8 = 52
J2SE 7 = 51
J2SE 6.0 = 50
J2SE 5.0 = 49
JDK 1.4 = 48
JDK 1.3 = 47
JDK 1.2 = 46
JDK 1.1 = 45

 


ok。找到了問題,那么解決起來就方便了。因為這台服務器上tomcat中的工程使用的是1.7,所以這里我為es創建了一個賬戶,對es賬戶設置特定的環境變量(JDK1.8)。


 

操作步驟:

第一步:修改/home/es目錄下的.bash_profile文件,添加上JAVA環境變量

[es@sgadmin ~]$ vim .bash_profile 
# .bash_profile

# Get the aliases and functions
#if [ -f ~/.bashrc ]; then
#       . ~/.bashrc
#fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export JAVA_HOME=/home/es/jdk1.8.0_92
export PATH=$JAVA_HOME/bin:$PATH

第二步:使用source命令,使配置文件生效。source .bash_profile

第三步:使用java -version 命令,查看當前用戶java環境

 


 

改進:每次登陸后自動執行source命令

如上操作在當前的窗口是可以執行當前的環境變量,但是當你這個用戶下一次再登陸的時候,那么還是使用的是默認的環境變量,如果需要特定的環境變量,那么需要再次使用source命令。這樣做起來非常麻煩。

這里其實可以讓用戶每次登陸的時候自動執行一次 source .bash_profile

其實當我們每次登陸后 能使用一些特定的命令比如ls ll 等等其實都是自動的加載了系統的一些環境變量。

有了這個思路以后我們只要找到每次登陸都會執行的那個文件,在里面添加上我們的source 命令即可。

這里需要修改的就是自己目錄下的.bashrc文件(/home/es/.bashrc)

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

source $HOME/.bash_profile

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions

在這里需要注意,如果使用此種方式,那么需要將.bash_profile中的如下代碼注釋掉,否則會處於無限等待的狀態,然后報錯:Segmentation fault。其實思考一下就知道為什么會報這個錯誤。(出現了Segmentation fault,基本上的原因是,非法的內存訪問。例如數組的越界,在循環操作時循環變量的控制問題,也有字符串拷貝時長度溢出,指針指向了非法的空間,還有就是申明一個指針,但卻沒有對其初始化,就直接引用,或者沒有開辟內存空間就釋放內存,所以要檢查申請空間時間偶成功。)

# Get the aliases and functions
#if [ -f ~/.bashrc ]; then
#       . ~/.bashrc
#fi

 


擴展:

  1./etc/pro      此文件為系統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行.並從/etc/profile.d目錄的配置文件中搜集shell的設置.
  2./etc/bashrc     為每一個運行bash shell的用戶執行此文件.當bash shell被打開時,該文件被讀取.
  3.~/.bash_pro    每個用戶都可使用該文件輸入專用於自己使用的shell信息,當用戶登錄時,該文件僅僅執行一次!默認情況下,他設置一些環境變量,執行用戶的.bashrc文件.
  4.~/.bashrc     該文件包含專用於你的bash shell的bash信息,當登錄時以及每次打開新的shell時,該文件被讀取.
  5.~/.bash_logout 當每次退出系統(退出bash shell)時,執行該文件.

  source  /etc/profile  與  .  /etc/profile效果一樣。

 


免責聲明!

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



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