2012-03-22 256 views
0

我試圖通過使用 Net :: SSH連接遠程SSH服務器ruby。它對我通過 提供的所有命令都正常工作腳本,我能夠成功讀取命令 的輸出。但是,當我使用下面的命令時,它陷入了 SSH.exec!(cmd)並且控制不會從行中返回。只有當我在命令行中點擊Ctrl + c時,腳本纔會結束。該命令 是./wcsadmin.sh開始 - >這是用來啓動我的 申請的過程中遠程服務器使用Net :: SSH遠程SSH命令執行在特定命令中掛起

請找我的Ruby腳本的下面的代碼片段:

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

的當我手動執行它的命令的輸出是:

[根@測試二進制]#./wcsadmin.sh啓動

啓動網絡控制系統...

這可能需要幾分鐘的時間...的stty:標準輸入:無效的參數

網絡控制系統成功啓動。

啓動SAM守護進程...完成。啓動DA守護......開始DA系統日誌 守護......開始

如果我使用ssh.exec(「./ wcsadmin.sh啓動」),唯一的區別是上述輸出 是越來越打印,但仍該程序永遠不會結束.I 需要通過按ctrl + c手動結束它。當我在谷歌搜索我 能找到可以使用

nohup命令( 'nohup的/opt/wcsadmin.sh開始> /tmp/teststartserver.log 2> & 1')

到跳過掛斷信號,並嘗試相同。這也寫輸出到teststartserver.log但 被絞死。任何人都可以請幫我解決這個問題?

在此先感謝!

感謝,米娜

回答

0

如果命令本身不會立即返回,然後SSH.exec!將阻止進一步的執行,直到命令返回。如果由於某種原因你失去了遠程聯繫,那麼SSH.exec!可能不知道你失去了連接,並且會繼續阻止。

你可以嘗試把命令在後臺:

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

或者,也許只看該命令的文檔,也許它有某種--no-wait選項,將允許它立即返回,即使仍在工作。