我正在尝试通过ruby使用连接远程ssh服务器 Net :: SSH.It对我提供的所有命令都很好 脚本,我能够读取命令的输出 成功。但是,当我使用下面的命令时,它会陷入困境 SSH.exec!(cmd)和控件不会从该行返回。只有我 在命令行中单击Ctrl + c,脚本即将结束。命令 是./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 syslog 守护进程......开始
如果我使用ssh.exec('./ wcsadmin.sh start'),唯一的区别就是 以上输出正在打印,但程序仍然没有结束.I 需要通过按ctrl + c手动结束它。当我在谷歌搜索我 可以找到你可以使用
nohup命令('nohup /opt/wcsadmin.sh start> /tmp/teststartserver.log 2>& 1')
跳过挂断信号并尝试相同。这也将输出写入teststartserver.log但是 被绞死了。任何人都可以帮我解决这个问题吗?
提前致谢!
谢谢,Meena
答案 0 :(得分:0)
如果命令本身没有立即返回,那么SSH.exec!将阻止进一步执行,直到命令返回。如果由于某种原因你失去远程联系,那么SSH.exec!可能不知道你已经失去了连接,它将继续阻止。
您可以尝试将命令放在后台:
output = ssh.exec!('/opt/wcsadmin.sh start &')
或者查看该命令的文档,也许它有某种--no-wait
选项,允许它立即返回,即使它仍在工作。