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.