使用简单的ruby脚本 - 从memcacheq服务中提供队列列表。
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
命令后没有关闭连接?
答案 0 :(得分:2)
正在寻找"Prompt"
正则表达式,知道命令已经完成。
来自文档:
的提示/匹配强>
与主机的命令行提示符序列匹配的正则表达式。 Telnet类需要这一点来确定命令的输出何时完成且主机是否准备好接收新命令。默认情况下,此正则表达式为/[$%#>] z/n
。
由于stats queue
以END
结尾,所以此类内容应该有效。
# Change cmd to wait for "END"
host.cmd("String" => "stats queue", "Match" => /^END/) { |q| puts q }
host.close