ssh + екран: як це зробити?


0

Я намагаюся запустити програмне забезпечення через 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'

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



Я не вірю, що простори нічого спільного з цим не мають. Основна проблема полягає в тому, щоб сказати ssh відійти на другий план, а по-друге, переконатися, що ~локальне не розширюється. Питання, пов’язані з цим: superuser.com/questions/1171397/…
— малиновий егрет

Відповіді:


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):

.. але екран негайно закриється після успішної команди


"краще згрупувати варіанти разом"? Я б сказав, що це питання думки і абсолютно не має значення для проблеми ОП.
— малиновий-чапля

Вибачте, але "-dmS" є на зразок стандартного рядка параметрів для екрана. Це робить його більш читабельним, навіщо використовувати додатковий простір? Звичайно, це не обов’язково.
— Роберт Ридл

Ви маєте рацію, що додатковий простір не потрібен і, мабуть, легше читається, якщо ви звикли дивитися -dmS NAME, але це все ще не відповідає на проблему, поставлену запитувачем.
— малиновий-чапля

Я оновлю відповідь
— Роберт Ридл

0

Я бачу дві (потенційні) проблеми з вашим закликом до

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

Більше того, оскільки екран створює власні 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.