staf更改环境变量

staf是IBM推出的开源分布式测试框架,广泛应用于分布式系统的测试中。在实际使用中,遇到两个诡异的问题,详情如下:

问题一:配置好机器之间信任关系之后,在A机器用staf命令远程到B机器,查看B机器的LD_LIBRARY_PATH环境变量,命令行如下(假设B机器IP为192.168.1.2):

staf 192.168.1.2 process start shell command "echo $LD_LIBRARY_PATH"  wait returnstdout stderrtostdout

显示结果打出的却不是B机器的LD_LIBRARY_PATH当前值,修改B机器的~/.bashrc、~/.bash_profile中LD_LIBRARY_PATH的值,再执行上述命令,发现结果没有任何变化,即对~/.bashrc、~/.bash_profile两文件的修改根本没影响到staf的环境变量。

~/.bashrc、~/.bash_profile经过仔细对比,发现上述命令实际打出的不是B机器的LD_LIBRARY_PATH值,而是A机器自身的LD_LIBRARY_PATH值!如果不是查看环境变量,而是到B机器做其它操作(如看主机名hostname),则一切正常,显示的都是B机器的信息。至于staf为何不支持命令行查看其它机器的环境变量,IBM官方未予解释。

因此,如果想用staf命令直接查看B机器的环境变量,可以在B机器上新建一个脚本test.sh,在脚本中echo $LD_LIBRARY_PATH,然后在A机器上用staf命令远程到B机器,找到这个脚本并执行。

问题二:上述问题解决后,发现用test.sh打出的环境变量仍然与当前B机器的LD_LIBRARY_PATH值不一致,且修改~/.bashrc、~/.bash_profile、重登陆都无效。

经过在staf安装目录下排查,发现staf/bin下面,有一个STAFEnv.sh,而启动staf的脚本startSTAFProc.sh中调用了这个脚本,因此可以断定,staf的环境变量是在启动staf进程的时候设置好的,具体的变量值在STAFEnv.sh脚本之中设置(如果其中有某些变量没设,则直接取系统当前变量值)。且一旦staf进程启动,则staf读取的环境变量就完全固定了,之后再对~/.bashrc、~/.bash_profile等文件进行修改,也只能影响当前用户的环境变量,而无法更改staf读取的环境变量。

一言以蔽之:staf只读取它启动时的环境变量值,且不会自动更新,要更新其环境变量只能杀掉staf,export好环境变量,然后重启staf。在测试中如果对环境变量有较强依赖,建议在每次远程执行命令时,先用staf在那台机器export一下所需的环境变量,之后再做自己的操作(注:export和自己的操作是同一次staf调用)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值