В 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
запустит оболочку без входа в систему . Поэтому он не загрузит файл ~ / .bash_profile
. Затем, когда я определил эти переменные в файле ~ / .bashrc
, это сработало.
Ваш ответ может быть здесь Почему $ PATH удаленной команды ssh отличается от таковой в интерактивной оболочке?
В основном, потому что вы запускаете команду как аргумент, вы на самом деле не открываете оболочку, поэтому файлы не загружаются, а переменная PATH
загружается с этими файлами.
Что вы можете сделать, так это создать эти файлы перед запуском команды cassandra, и может работать
/etc/bashrc
/etc/profile
~/.bash_profile