Google-Compute-Engine
當 pssh 到遠端伺服器時,路徑似乎不正確
在 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