Я пытаюсь запустить программное обеспечение через SSH:

Я могу сделать :

ssh -t user@xx.xx.xx.xx 
screen -S datanode -d -m ~/hadoop/bin/hdfs datanode

Но

ssh -t user@xx.xx.xx.xx screen -S datanode -d -m ~/hadoop/bin/hdfs datanode

Не работает

Я пробовал несколько вариантов с кавычками:

ssh -t user@xx.xx.xx.xx screen '-S datanode -d -m ~/hadoop/bin/hdfs datanode'

или же

ssh -t user@xx.xx.xx.xx screen -S datanode -d -m '~/hadoop/bin/hdfs datanode'

или же

ssh -t user@xx.xx.xx.xx screen ' -S datanode -d -m ~/hadoop/bin/hdfs datanode'

но я не могу найти правильный :-(

2 ответа2

0

Я вижу две (потенциальные) проблемы с вашим заклинанием

ssh -t remote screen -S datanode -d -m ~/hadoop/bin/hdfs datanode
  1. Клиентская / локальная оболочка (та, которая выполняет ssh) - это та, которая расширяет ~ и заменяет значением $HOME , которое может отличаться от значения на удаленном сервере. Предложите вам использовать либо относительный путь (например, ./hadoop/bin/hdfs /bin/hdfs), либо полный путь, либо заключить удаленную команду в одинарные кавычки (например, ~ / hadoop / bin / hdfs datanode), чтобы предотвратить расширение на клиенте. ,
  2. Поскольку команда screen запускает отдельный экземпляр, но все еще является дочерним процессом оболочки, запускаемой ssh, она завершается при выходе из удаленной оболочки.

Более того, поскольку screen создает свой собственный tty, вам не нужна опция -t для ssh .

Вместо этого попробуйте использовать -f чтобы сказать ssh нужно перейти в фон непосредственно перед выполнением команды. то есть:

ssh -f remote screen -S datanode -d -m ./hadoop/bin/hdfs datanode

Не менее правильная альтернатива с использованием nohup:

ssh remote nohup screen -S datanode -d -m ./hadoop/bin/hdfs datanode
0

Лучше сгруппировать варианты вместе

ssh -t username@host "screen -dmS 'NAMEofSCREEN' command"

Затем вы можете присоединить

screen -r NAMEofSCREEN

Просто имейте в виду, что это не будет повторно присоединяемый экран, если command выходит. Например:

ssh -t username@host "screen -dmS 'NAMEofSCREEN' echo | wall"

Даст вам сообщение на wall ...

Broadcast message from user@host (pts/15) (Tue Jan 16 12:04:07 2018):

.. но экран сразу закроется после успешного выполнения команды

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .