How to get exit status with Ruby's Net::SSH library?

后端 未结 3 2061
囚心锁ツ
囚心锁ツ 2021-01-30 02:32

I have a snippet of code, simply trying to execute a script on a remote server, in the event that it fails, I\'d like to make a follow-up call, imagine this:

req         


        
3条回答
  •  悲&欢浪女
    2021-01-30 03:15

    For newer versions of Net::SSH, you can just pass a status hash to Net::SSH::Connection::Session#exec:

    status = {}
    
    Net::SSH.start(hostname, user, options) do |ssh|
      channel = ssh.exec(command, status: status)
      channel.wait # wait for the command to actually be executed
    end
    
    puts status.inspect
    # {:exit_code=>0}
    

    By default, exec streams its output to $stdout and $stderr. You can pass a block to exec to do something different, a la:

    ssh.exec(command, status: status) do |ch, stream, data|
      if stream == :stdout
        do_something_with_stdout(data)
      else
        do_something_with_stderr(data)
      end
    end
    

    This works on 6.1.0 - not sure about availability for older versions. See http://net-ssh.github.io/net-ssh/Net/SSH/Connection/Session.html#method-i-exec for more details.

提交回复
热议问题