2012-03-22 217 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选项,将允许它立即返回,即使仍在工作。