Удаленное выполнение команды SSH зависает в ruby, используя Net :: SSH для конкретной команды - PullRequest
0 голосов
/ 22 марта 2012

Я пытаюсь подключиться к удаленному серверу SSH через ruby, используя Net :: SSH. Работает нормально для всех команд, предоставляемых через сценарий, и я мог прочитать вывод команды успешно. Но когда я использую приведенную ниже команду, она застревает в SSH.exec! (Cmd) и управление не возвращается с линии. Только если я нажмите Ctrl + C в командной строке, сценарий заканчивается. Команда is ./wcsadmin.sh start -> используется для запуска процессов моего приложение на удаленном сервере

Пожалуйста, найдите приведенный ниже фрагмент кода моего скрипта ruby:

Net::SSH.start(host, username, :password => password) do |ssh|
puts 'before exit'
output = ssh.exec!(/opt/wcsadmin.sh start)
puts 'Executed command'

Вывод команды, когда я делаю это вручную:

[root @ test bin] # ./wcsadmin.sh start

Запуск системы управления сетью ...

Это может занять несколько минут ... stty: стандартный ввод: неверный аргумент

Система управления сетью успешно запущена.

Запуск демона SAM ... Готово. Запуск демона DA ... Запуск системного журнала DA демон ... начало

если я использую ssh.exec ('./ wcsadmin.sh start'), единственная разница заключается в вышеприведенный вывод печатается, но программа никогда не заканчивается. нужно вручную завершить его, нажав Ctrl + C. Когда я искал в Google, я мог найти вы можете использовать

команда nohup ('nohup /opt/wcsadmin.sh start> /tmp/teststartserver.log 2> & 1')

чтобы пропустить сигналы зависания и попытался сделать то же самое. Это также записывает вывод в teststartserver.log, но быть повешенным. Может кто-нибудь помочь мне в этом вопросе?

Заранее спасибо!

Спасибо, Мина

1 Ответ

0 голосов
/ 02 февраля 2013

Если сама команда не возвращается сразу же, тогда SSH.exec!будет блокировать дальнейшее выполнение, пока команда не вернется.Если по какой-то причине вы теряете удаленный контакт, то SSH.exec!может не знать, что вы потеряли связь, и она продолжит блокировать.

Вы можете попробовать поместить команду в фоновом режиме:

output = ssh.exec!('/opt/wcsadmin.sh start &')

Или, возможно, посмотрите документацию по этой командевозможно, у него есть какая-то опция --no-wait, которая позволит ему немедленно вернуться, даже если он все еще работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...