使用 pssh 连接到远程服务器时,PATH 似乎不正确

使用 pssh 连接到远程服务器时,PATH 似乎不正确

在 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

相关内容