На GCE у меня 3 виртуальных машины, и я могу использовать ssh
чтобы получить к ним доступ из одного из них.
Я установил на них Кассандру и настроил 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