NET::SSH 中 关于要对远程执行reboot时的坑爹教训
最近在利用ruby 通过ssh的方式来操作linux机子。遇到了一个问题,就是ruby在ssh端去执行reboot命令的时候,channel断掉了,导致执行exec! (’reboot‘) 之后 就卡死,无法继续执行。然后网上查了写些资料,遂采用了exec的方式,非阻塞模式,但是奇葩的时候,这个exec执行完虽然不卡,一下就执行过,但是问题来了,reboot命令没有被执行啊,设备没有被重启。。。。。 郁闷
对于reboot命令 没有被执行,这个问题具体原因 也没有深究,但我个人感觉是因为采用了非组塞模式后,管道无法达到 ???
?
最后处于无奈啊
经过多次尝试,发现了一个奇葩的解决方式 ?。。。
在执行完exec('reboot')之后,在执行一个exec!('xxxx') ?xxx任何命令都可以。 ?竟然可以成功了?
?
?
? ssh = Net::SSH.start("200.200.165.139", username, {:password => password , :port => port})?
?#puts uiui
?puts ssh
?puts ssh.exec!('date')?
? ? ? ? ?rest = ssh.exec('reboot -f')
? puts ssh.exec!('date') ? ? #加上这句之后,一切都好了
?puts rest
?
?puts "hello end"