Google-Compute-Engine

當 pssh 到遠端伺服器時,路徑似乎不正確

  • January 2, 2018

在 GCE 上,我有 3 個虛擬機,我可以使用ssh其中一個來訪問它們。

我已經在它們上安裝了 Cassandra 並PATH~/.bash_profile.

~/.bash_profile:

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,它就起作用了。

您的答案可能在這裡為什麼 ssh 遠端命令的 $PATH 與互動式 shell 的不同?

基本上,因為您將命令作為參數執行,您實際上並沒有打開 shell,因此不會載入文件,而是PATH使用這些文件載入變數。

您可以做的是在執行 cassandra 命令之前獲取這些文件,它可能會起作用

/etc/bashrc
/etc/profile
~/.bash_profile

引用自:https://serverfault.com/questions/890271