偶然发现通过/etc/profile 中定义的 PATH 环境变量,竟然不生效了。
因为需要在一台数据库服务器上,新建一个从库,因为是安装的多实例,要用socket登录,觉得麻烦,所以加了个别名
alias my3306='mysql -uroot -p -S /data/3306/mysql.sock'
这样登录就很方便了,没想到登录时竟然报错:“ 命令找不到 ” ,第一反应就是没有环境变量,难道部署时没有配置?看了下环境变量:
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin # 果然mysql的没有了
因为mysql 是编译安装的,所以就在/etc/profile 中添加了mysql的环境变量,检查了下/etc/profile , 添加环境变量的也还在
export PATH=/usr/local/mysql/bin:$PATH
没毛病啊,继续往下看,就发现了这个:
这是用来记录“终端会话的”,前面一篇文章有提到,用来记录终端会话内容的。因为最近只做了这么一次操作,推测原因应该就是这个了,先将这段注释,然后source /etc/profile 环境变量又回来了。
原因分析:
因为上面的记录会话部分,使用了exec,exec 命令并不启动新的进程执行script , 而是执行script 去替换当前的进程, 并清理了老进程的环境变量,也就是profile中前面定义的。 同时, exec 后面都不会执行了。
那么问题来了,既然已经清理了环境变量,那登陆后为什么还有上面的环境变量,虽然不完整。
这个问题,说来也是巧合,因为我为了每次登录都能自动打印 内存,cpu 信息,所以写了个获取信息的脚本,放到了/etc/profile.d/ (用户登录时,这个目录下的*.sh 文件都会被执行,关于这里 在profile中有定义,可以看下)下,这样每次登录都能显示信息:
在这个脚本中,又定义了环境变量,多亏当时写了这个,不然岂不是要用绝对路径了。
后来测试了下,的确就是这个环境变量。
解决方法:
既然如此,就好处理了,将PATH定义在其他路径里,所以在/etc/profile.d/加了个path.sh 所有的环境变量,都定义在这里。
https://www.hugbg.com/archives/85.html
评论