2014-12-13 3 views
0

Имеет простой скрипт ruby ​​- предоставляет список очередей из сервиса memcacheq.Telnet не закрывает соединение

require 'net/telnet' 

host = Net::Telnet::new("Host" => "127.0.0.1", "Port" => 22201, "Telnetmode" => false) 
host.cmd("stats queue") { |q| puts q } 
host.close 

Есть следующий выход

STAT email_v2_websiteusers 4770/4770 
STAT media_casting 7444/7444 
STAT encoder_v1_job 7479/7479 
STAT pg_generator 163/163 
STAT streaming_session_stats 163756/163756 
STAT pg_export 150/150 
END 

Но сценарий не близко, он ждет несколько секунд и возвращается сообщение об ошибке:

/usr/lib/ruby/1.9.1/net/telnet.rb:558:in `waitfor': timed out while waiting for more data (Timeout::Error) 
    from /usr/lib/ruby/1.9.1/net/telnet.rb:695:in `cmd' 
    from memcacheq-metrics.rb:18:in `<main>' 

Почему соединение не будет закрыто после close команды?

ответ

2

Он ищет "Prompt" regexp, чтобы узнать, что команда завершена.

Из документов:

Prompt/Match
a regular expression matching the host’s command-line prompt sequence. This is needed by the Telnet class to determine when the output from a command has finished and the host is ready to receive a new command. By default, this regular expression is /[$%#>] z/n .

С stats queue заканчивается END то что-то, как это должно работать.

# Change cmd to wait for "END" 
host.cmd("String" => "stats queue", "Match" => /^END/) { |q| puts q } 
host.close 
+0

Большое спасибо! Оно работает – Eugene

Смежные вопросы