Назад | Перейти на главную страницу

Пути кажутся неправильными при отправке pssh на удаленные серверы

На 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