引言
记录一次使用MobaXterm工具连接数据库时出现的问题。
现象是这样的:通过MobaXterm使用账户A以SSH方式连接登录测试服务器,尝试重启服务。服务启动时提示JDK版本不一致:Unsupported major.minor version 52.0
查询一下java版本
开发环境是 jdk8,服务器查询出来的版本却是7,导致重启服务失败。
排查
我查询了环境配置的文件:~/.bash_profile
里面清楚的写了java环境变量配置的命令
逻辑上讲应该正常加载到当前账户A的环境变量中。
尝试手动加载配置文件,之后查看java版本
发现此时jdk版本正常了,可以说文件和命令都是可用的,文件本身应该是没有问题的。
测试一下,在文件的头部添加命令,输出.bash_profile到控制台。
echo ".bash_profile"
保存后。重新连接发现 没有任何打印。
以上说明,~/.bash_profile该配置文件在账户A登陆时没有正常加载出来。
因为,在此之前我是可以正常使用MobaXterm重启服务的,我按照以前的方法在MobaXterm上新建了一个session连接到服务器发现 控制台输出了 .bash_profile,也就是说这次登录加载了 ~/.bash_profile,检查Java版本发现是jdk8。
接下来考虑这两个session的区别。
由于我之前使用了 session 中 Execute Command 执行了cd命令,以便在打开Shell后直接进入服务的目录下
通过这种方式打开的shell,我推测是moba与服务器建立连接后通过Nologin方式执行了shell脚本,此时打开的shell是Nologin Shell,是不执行~/.bash_profile的。所以环境变量未加载上。
结论
如果希望 Execute command 好用,可以将环境变量配置在 ~/.bashrc 文件中,或者全局的配置文件 /etc/profile 中。
其次,不调整配置文件的方法,可以使用session setting中的宏录制方式,来达成建立连接后自动执行某些命令。链接:录制宏的方法
参考:
Linux环境变量配置
Login Shell和No-Login Shell
Linux环境变量相关操作