対象:
CRuby
JRuby

net-sshでリモートプロセスの終了ステータスを取得

net-sshでリモートのシェルスクリプトやコマンドの終了ステータスを取得するには、open_channelメソッドでオープンしたチャネルにon_requestメソッドでブロックを登録する。

on_requestメソッドの引数には"exit-status"を指定し、ブロックに渡されたdataに対してread_longメソッドを使えばリモートプロセスの終了ステータスを取得できる。

require "rubygems"
require "net/ssh"

Net::SSH.start("localhost" , "mobile", :password => "mobile") do |ssh|
  wch = ssh.open_channel do |channel|
    channel.exec("./exit.sh") do |ch, success|
      channel.on_data {|ch, data| print data}
      channel.on_extended_data {|ch, type, data| print data}
      # data.read_longでリモートプロセスの終了ステータスが取得できる
      channel.on_request("exit-status") {|ch, data| print "exit-status is #{data.read_long}\n"}
    end
  end
  wch.wait # リモートプロセスの終了まで待機する
end

上記スクリプトssh_exit_status.rbで呼び出しているシェルスクリプトexit.shは以下のようなものである。

#!/bin/sh
echo "exit status test"
exit 99

これを実行すると以下のようにsshしてexecしたシェルスクリプトの終了ステータスが得られる。

[mobile@localhost ruby]$ jruby ssh_exit_status.rb
exit status test
exit-status is 99
Net::SSH::Connection::Channel.on_request
(2010/03/29)

新着情報
【オープンソースソフトウェア環境構築】Apple silicon Macで開発環境を構築
【Rust Tips】Actix webでJSONをPOSTする
【Rust Tips】コマンドライン引数を取得する

Copyright(C) 2004-2014 モバイル開発系(K) All rights reserved.
[Home]