Перейти к содержимому

ssh + screen: как сделать?

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' 

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

461 просмотр
Romain Jouin спросил 8 лет назад
R 109

2 ответа

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

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

«лучше сгруппировать варианты»? Я бы сказал, что это вопрос мнения и совершенно не имеет отношения к проблеме ОП.

eggo · 8 лет назад · 0

Извините, но "-dmS" - это стандартная опция-строка для экрана. Это делает его более читабельным, зачем использовать дополнительное место? Конечно это не обязательно.

Robert Riedl · 8 лет назад · 0

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

eggo · 8 лет назад · 0

Я обновлю ответ

Robert Riedl · 8 лет назад · 0
Robert Riedl ответил 8 лет назад
R 200
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 
eggo ответил 8 лет назад
E 1 246