2016-01-18 3 views
2

Я использую Net-ssh для запуска удаленного сценария Python. Кажется, что скрипт Ruby висит и никогда не заканчивается, когда скрипт Python занимает много времени (около 20 минут).Net-ssh session timeout

Я протестировал скрипт, запустив его напрямую и завершив его без ошибок. Кроме того, все работает нормально, когда скрипт выполняется за более короткий промежуток времени.

Это отрывок кода я использую:

(0..(@number_of_vms - 1)).each_with_index do |vm, i| 
    threads << Thread.new do 
    Net::SSH.start('ip-address-vm', user, options = ...) do |session| 
     cmd = 'python python_script.py' 
     output = session.exec!(cmd) 
    end 
    end 
end 
threads.each {|thr| thr.join } 

Может ли это быть связано с какой-то тайм-аут для SSH сессии?

EDIT: Я проверил, что сценарий успешно завершен на удаленном сервере.

+0

Does этот сценарий python записывает любой вывод на стандартный вывод или стандартную ошибку? Где этот выход идет, когда вы запускаете скрипт из ruby? – Kenster

+0

Да, да. Он присваивается 'output'. Кроме того, у меня есть несколько файлов журнала. – Rojj

ответ

0

Проблема связана с тайм-аутом сервера SSH. Я решил проблему, изменив настройки на сервере. Я добавил следующую строку:

ClientAliveInterval 60 

в /etc/ssh/sshd_config

На основе this статьи должно быть возможно сделать подобную модификацию на клиенте:

ServerAliveInterval 60 

в /etc/ssh/ssh_config