在 GCE 上,我有 3 个虚拟机,我可以ssh
从其中一个虚拟机访问它们。
我已在它们上安装了 Cassandra,并PATH
在 中配置了环境变量~/.bash_profile
。
〜/ .bash_配置文件:
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export CASSANDRA_HOME=/opt/apache-cassandra-3.11.1
export SPARK_HOME=/opt/spark-2.1.2-bin-hadoop2.7
PATH=$PATH:$CASSANDRA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin
export PATH
奔跑echo $PATH
和获得/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/nmj/.local/bin:/home/nmj/bin:/opt/apache-cassandra-3.11.1/bin:/opt/spark-2.1.2-bin-hadoop2.7/bin:/opt/spark-2.1.2-bin-hadoop2.7/sbin
意味着正确的。
但跑步时pssh -h hosts.txt -l nmj -i 'echo $PATH'
,我只得到了
/usr/local/bin:/usr/bin
。
$PATH
外观不正确这里。
因此,我无法用来pssh
并行执行 ssh 来启动cassandra
,例如pssh -h hosts.txt -l nmj -i cassandra
,因为bash: cassandra: command not found
。
如何$PATH
正确配置?
解决方案:
我认为,pssh
将开始非登录 shell。所以它不会加载~/.bash_profile
文件。然后当我在文件中定义这些变量时~/.bashrc
,它就起作用了。
答案1
你的答案可能就在这里为什么 ssh 远程命令的 $PATH 与交互式 shell 的不同?
基本上,因为您正在运行命令作为参数,所以您实际上并没有打开 shell,因此文件不会被加载,并且变量PATH
会与这些文件一起加载。
你可以做的是在运行 cassandra 命令之前获取这些文件,这样可能会有效
/etc/bashrc
/etc/profile
~/.bash_profile