Присоединитесь к экрану GNU, а затем выполните команды

Я видел некоторые подобные вопросы, но решения, похоже, не работают в моем случае.

Я пытаюсь подключиться по SSH к определенному экземпляру экрана на машине Node, а затем выполнить некоторые команды.

Мой текущий процесс таков:

На удаленной машине я создаю экземпляр экрана:

screen -dmS "my_screen"

С моей локальной машины я делаю что-то вроде:

ssh <user>@<remote> -a -x -t screen -x -r my_screen -X stuff 'ruby my_script.rb'

но вывод просто:

Соединение по адресу (ip) закрыто.

и скрипт ruby ​​не запускается.

Если я разделю команды, то скрипт будет работать правильно, например:

ssh <user>@<remote> -a -x -t screen -x -r my_screen

он подключается к экрану, а затем я вручную ввожу:

ruby my_script.rb
exit

Затем сценарий выполняется на экране, как и предполагалось.

Как правильно отправлять команды на экран?


person Mundisoft    schedule 17.08.2016    source источник
comment
Автоматизация screen неудобна. tmux гораздо проще автоматизировать благодаря современной архитектуре и хорошей документации.   -  person chicks    schedule 18.08.2016


Ответы (2)


Во втором примере вы выполняете команду, вводя ее в консоль. Если это то поведение, которое вы хотите подражать, вы можете использовать команду stuff, чтобы screen вставить текст в консоль для его выполнения.

ssh <user>@<remote> -a -x -t screen -x -r my_screen -X stuff \"ruby my_script.rb^M\"

(Обратите внимание, что ^M был создан с использованием CTRL-V, CTRL-M).

Это ничего не отобразит на вашем открытом терминале, но когда вы снова подключитесь к экрану, вы должны увидеть вывод своей команды (при условии, что экран был в окне консоли в то время, когда вы отправили команду, что является риском с этим подход).

person teadotjay    schedule 18.08.2016
comment
Большое спасибо, это сработало! Я не уверен, почему, но другие мои подходы к размещению разрывов строк, похоже, не регистрировались при выполнении на удаленном экране, но это сработало отлично! - person Mundisoft; 19.08.2016

Вы должны использовать exec вместо stuff. Как следует из названия, exec выполняет команды внутри экрана.

ssh <user>@<remote> -a -x -t screen -x -r my_screen -X exec ruby myscript.rb
person Mr. 10    schedule 22.09.2016