• 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效果一样。

  • 相关阅读:
    2.7连接数据库中遇见的相应问题1
    linux bash中too many arguments问题的解决方法
    linux系统补丁更新 yum命令
    安装node,linux升级gcc
    python-导出Jenkins任务
    升级openssl和openssh版本
    linux修改文件所属的用户组以及用户
    linux的Umask 为022 和027 都是什么意思?
    keepalived
    自己编写k8s
  • 原文地址:https://www.cnblogs.com/0xcafedaddy/p/6180851.html
Copyright © 2020-2023  润新知