今天搭建hive + spark测试环境过程中,无意发现改变了/etc/profile里JAVA_HOME的值后,虚拟机重启竟然未生效,重试几次都一样,source后才正常。我的知识储备告诉我,真正的重启不可能不生效的,直觉下先怀疑起重启这件事了。虚拟机用的VMware,难道是它的原因?我直接重启的虚拟机,连VMware的虚拟机页签都不曾关闭,于是关闭再试,还是不生效;关闭VMware本身再试,依然不生效。没办法了,baidu,结果不如意;google,结果仍然不如意。吐槽下CSDN上的文章,个人感觉质量太低,直接一个链接的;直接一个链接,然后内容就是拷贝链接的;糅合多篇文章的算好的了,原创的太少。还有一个大通病,不知道搞技术的语文水平低还是写文章的态度就是搞kpi,语句不通,错字连篇......相对来讲,简书和思否上的文章好很多,不说技术,至少文字好很多。这也是我选择在简书上开始写写文章的原因......
回到问题本身,搜索问题过程中,遇到几篇直接让不要定义在/etc/profile,而是定义在其它配置文件里的文章,都来自一篇文章,多篇就是附链接转载,让人微恼的同时(本人很讨厌这种说不清或不说原因,直接搞起的,不说没探究精神,有可能不明不白的其实压根没搞对),突然开阔了我的一个思路,类似ABA场景,不是没生效,而是生效后又被覆写回原值了。因为JAVA_HOME太基本了,能用到的场景太多。按着网上查到的linux下几处常见配置文件的优先级依次查看,果然在/etc/bashrc里发现了JAVA_HOME配置,就是它了。我记起来某次遇到的一个JAVA_HOME未设置(其实在/etc/profile里设置了)的问题,解决方案是在/etc/bashrc里再配置JAVA_HOME,原理涉及登录/非登录shell使用配置文件的区别......
这次解决问题过程更坚定了我的观点:相对来讲,重要的是思维,思想,而不是经验。这个问题,最开始我一直纠结为什么是A,应该是AB的,直到最后才想到可能是ABA的缘故。至于怀疑重启不是真正的重启,这个后来看有点方向偏了,其它场景可能是缓存值造成的(譬如idea,更改环境变量,关闭项目,如果因为还打开有其它项目而实际idea本身未关闭,单纯关闭项目没用的,就是idea级别的缓存未更新,得重启idea),但在VMware这种成熟的商用软件级别,关了虚拟机的行为应该就要达到真正重启的要求,这是产品级别的视角或认知,不可能掺杂性能考虑,使用缓存,然后搞的重启无效。