今天遇到个问题就是每次重启 es 服务或重启电脑都需要 source 才能使一部分配置生效.

一致很懵在另一台电脑上并没有问题,一开始以为可能系统版本不一致,centos 6.5 可能有特定的配置但是一番百度后发现并没有,而且通过同事电脑测试了,也没有这个问题。后来根据网上一片帖子讲述了他在一次 java 环境变量配置后重启失效的问题,说是因为有别的软件覆盖了他的环境变量。

根据这个思路查询启动时的执行的各个脚本最终发现了 es 的我的启动脚本中向/.bashrc 文件写入的一段用于初始化时同步时钟,并调用了一个更新配置 ik 插件的脚本。这段中修改了 profile 文件中的配置如果遇到更新就会复写。修改后并没有解决。随后疑心大起一度怀疑那段代码或配置或曾经用过的(特别时百度复制的脚本)中有问题。随后停下所有服务,一个个挨个启动检查,结果很悲催没有发现任何地方有问题。

第今儿下班后,不死心,有从头走了一遍。每次重启使用了 su 指定了用户,怀疑是不是用户问题之后把 es,mysql 等几个服务的用户改为 root 并重新配置环境变量后好了,至此可以确定原因肯定与不同用户有关。按照这个方向查找资料如下发现了不同方式读取加载不同。

图形模式登录时,顺序读取:/etc/profile 和~/.profile

图形模式登录后,打开终端时,顺序读取:/etc/bash.bashrc 和~/.bashrc

文本模式登录时,顺序读取:/etc/bash.bashrc,/etc/profile 和~/.bash_profile

从其它用户 su 到该用户,则分两种情况:

(1)如果带-l 参数(或-参数,--login 参数),如:su -l username,则 bash 是 lonin 的,它将顺序读取以下配置文件:/etc/bash.bashrc,/etc/profile 和~ /.bash_profile。

(2)如果没有带-l 参数,则 bash 是 non-login 的,它将顺序读取:/etc/bash.bashrc 和~/.bashrc

注销时,或退出 su 登录的用户,如果是 longin 方式,那么 bash 会读取:~/.bash_logout

执行自定义的 shell 文件时,若使用“bash -l a.sh”的方式,则 bash 会读取行:/etc/profile 和~/.bash_profile,若使用其它方式,如:bash a.sh, ./a.sh,sh a.sh(这个不属于 bash shell),则不会读取上面的任何文件。

上面的例子凡是读取到~/.bash_profile 的,若该文件不存在,则读取~/.bash_login,若前两者不存在,读取~/.profile。

分析应该是因为我所有环境变量配置的都是用户的,但是切换用户时会重新读取加载,有时通过终端,有时通过图形界面,不同用户操作引发的。

记录下,留以订正理解!